[ios學習記錄]可不可訂飲料APP-3 POST 上傳資料&問題

前面提到飲料資訊和選項資訊,現在要來說點餐表格了,下面是我認為需要的資訊,其實應該還要時間,但是時間AirTable已經幫我們建立好了,所以時間就使用他幫我們的就好

下面是API文件 回傳的資料,我們透過下面的文件來寫struct類別

struct orderInfo : Codable{
let records:[records]

struct records : Codable {
let createdTime:String
let fields:fields

struct fields : Codable {
let name:String
let team:String
let drinkName:String
let radioOption:[String]
let size:String
let price:Int
let remark:String?
let bubbleOption:Bool?
}
}
}

令人驚訝的是 他所回傳的時間 居然不是Date型別,而是字串,這邊如過要使用時間的要注意(問題1),這邊時間我沒有去轉換

剩下關於訂單的解碼就和PART 2 的顯示差不多,就不多說了,參考PART 2 可以做出訂單的表格

接著是這次專案的重頭戲,也就是POST上傳資料

究竟如何POST上去,上傳的資料又要漲什麼樣呢?我們一樣去看到API文件,找到你需要的表單 下方的 Create records

從他給的文件可以看到,如果想上傳表單,首先需要兩個Headers,並且使用POST方法,最後!上傳的格式就是下面他給你的 -data

奇怪,這個data好熟悉呀,這不就是我們訂單的資料嗎!!!
這就表示,我們可以透過同一個struct,來達成上傳和下載的功能

這邊我另外寫了一個上傳的struct,因為下載時我連同時間一起取得,可是在上傳時我不需要上傳時間,因此重寫一個,各位如果沒有抓取時間不需要和我一樣去重寫

struct orderInfo : Codable{
let records:[records]

struct records : Codable {
let createdTime:String
let fields:fields

struct fields : Codable {
let name:String
let team:String
let drinkName:String
let radioOption:[String]
let size:String
let price:Int
let remark:String?
let bubbleOption:Bool?
}
}
}
struct uploadOrderInfo : Codable{
let records:[records]

struct records : Codable {
let fields:fields

struct fields : Codable {
let name:String
let team:String
let drinkName:String
let radioOption:[String]
let size:String
let price:Int
let remark:String?
let bubbleOption:Bool?
}
}
}
struct order {
var name:String
var team:String
var drinkName:String
var radioOption:[String]
var size:String
var price:Int
var remark:String?
var bubbleOption:Bool?
}

可以看到除了時間,其餘沒有改變

那究竟要怎麼填進去呢?如果是要另外去填值,就會在呼叫時使用.init去將值寫入,等會會說到,先看上傳的網路請求,將剛才說到的重點實現

  1. 兩個Header

2. 使用POST

3. 將資料填入order表單

4. 編碼encoder,並存入request的 body

5. 完成request,就可以上傳囉!上傳和下載類似,他都會回傳一筆資料,我們可以檢查資料來查看是否完成

做到這裡,發現上傳老是出錯,資料明明是照著API文件給的,那麼究竟錯在哪呢

  • 這邊要注意,如果你和我一樣是使用陣列的話,陣列裡面的內容要先在表單填入,填入究竟哪些值他才能去儲存,沒有給他的值,他是不會去做儲存的

這邊我將甜度冰塊包成陣列去上傳,因此我必須在AirTable告訴他,這些值是我可以接收的。到這邊才不會出錯(問題2)

第一集

第二集

--

--