[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去將值寫入,等會會說到,先看上傳的網路請求,將剛才說到的重點實現
- 兩個Header
2. 使用POST
3. 將資料填入order表單
4. 編碼encoder,並存入request的 body
5. 完成request,就可以上傳囉!上傳和下載類似,他都會回傳一筆資料,我們可以檢查資料來查看是否完成
做到這裡,發現上傳老是出錯,資料明明是照著API文件給的,那麼究竟錯在哪呢
- 這邊要注意,如果你和我一樣是使用陣列的話,陣列裡面的內容要先在表單填入,填入究竟哪些值他才能去儲存,沒有給他的值,他是不會去做儲存的
這邊我將甜度冰塊包成陣列去上傳,因此我必須在AirTable告訴他,這些值是我可以接收的。到這邊才不會出錯(問題2)