Ep.25[ wen’s iOS ] — 搭配 AI 建立自己感興趣的 JSON API

api 就像服務生一樣幫你跟廚師溝通讓你完成某種想要的需求

API

要來請 AI 完成自己感興趣的 API 之前,先來介紹什麼是 API 吧,以下是CHATGPT 的解釋。

API(Application Programming Interface)是一組規範和工具,允許不同軟體系統之間的溝通和互動。它提供了一種方法,讓不同應用程式、服務或系統能夠彼此溝通、共享資訊和功能,如同餐廳中服務生和廚師之間溝通的橋樑。

Restful API

在查閱資料之後發現有另一種叫做 RestfulAPI 的東西,以下是參考這裡的介紹。

RESTful API 他是一種 API 的設計風格,其中的組成為

  • 動詞,HTTP Method
  • 名詞,URL 網址

在以往設計 API 時,每進行一項資料的操作時都要設計一個 URL 網址,如以下所示,而依照了 RESTful 風格設計的API則只需要對應的 HTTP Method 和一個 URL 網址(動詞加名詞的形式)即可滿足所有資料的操作。

好處:
用了 RESTful API 最大的好處在於擁有了統一的 URL 網址,在進行資料操作時只需要輸入相對應的 HTTP Method,就可以達成想要的效果,這樣不僅在開發可以省去命名網址的過程,在別人使用你做的 API 時,也可以快速的上手,不用在去了解你的命名規則。

瞭解api是什麼以及與 RESTAPI的差別後,可以讓 AI 來為我們寫 JSON 啦。

我請 CHATGPT 寫有關周杰倫所有歌曲的 JSON,寫出來第一層是 object ( { } ),第二層是 array 的成員是物件( { } )

{
"albums": [
{
"album_title": "范特西",
"release_year": 2001,
"songs": [
"印地安老斑鳩",
"龍捲風",
"黑色幽默",
"忍者",
"開不了口",
"上海一九四三",
"對不起",
"搖滾怎麼了",
"愛情懸崖",
"逆鱗"
]
},
{
"album_title": "八度空間",
"release_year": 2002,
"songs": [
"八度空間",
"戰爭世界",
"驚嘆號",
"溫柔",
"超人不會飛",
"傻笑",
"黑色幽默",
"威廉古堡",
"轉彎"
]
},
{
"album_title": "七里香",
"release_year": 2004,
"songs": [
"東風破",
"晴天",
"七里香",
"困獸之斗",
"以父之名",
"安靜",
"退後",
"星晴",
"爸我回來了",
"開不了口"
]
},
{
"album_title": "依然范特西",
"release_year": 2006,
"songs": [
"夜曲",
"以心電信",
"愛情漫遊",
"白色風車",
"藉口",
"退後",
"星晴",
"爸我回來了",
"開不了口",
"半島鐵盒"
]
},
{
"album_title": "魔杰座",
"release_year": 2008,
"songs": [
"菊花台",
"青花瓷",
"彩虹",
"擱淺",
"無雙",
"珊瑚海",
"龍戰騎士",
"花海",
"瑪莎拉蒂"
]
},
{
"album_title": "十一月的蕭邦",
"release_year": 2005,
"songs": [
"夜曲",
"髮如雪",
"簡單愛",
"安靜",
"千里之外",
"紅模仿",
"米蘭的小鐘"
]
},
{
"album_title": "跨時代",
"release_year": 2010,
"songs": [
"超人不會飛",
"跨時代",
"公公偏頭痛",
"雨下一整晚",
"愛的飛行日記",
"自導自演",
"嘻哈空姐",
"你好嗎",
"搁浅",
"我落淚 "
]
},
{
"album_title": "十二新作",
"release_year": 2012,
"songs": [
"算什麼男人",
"愛情轉移",
"麥芽糖 ",
"公公偏頭痛",
"突然好想你",
"我要夏天",
"開不了口",
"明明就",
"手語"
]
}
]
}

可以用這個網站來將 JSON 格式排版成較易閱讀的格式。

用這個網站來測試自己的 API URL是否還健在…能正常回傳內容。

請 AI 寫出 JSON 對應的 Swift Codable 型別

struct Album: Codable {
let album_title: String
let release_year: Int
let songs: [String]
}

struct AlbumsResponse: Codable {
let albums: [Album]
}

寫得還不錯,跟我寫得差不多,只不過我寫的 decode 的時候出問題,只好一直回頭重看影片,才發現 JSON 格式的各種形式 decode 時要有所不同 ( 例如是 array 組成還是先有一層物件,第二層才是 array ),再利用 sturct 或 class 寫出對應的型別再進行 decode 。

在 GitHub 新增AI 生成的 JSON

1.運用常常上傳作業 GitHub 網站,點選左上的 New 建立 Repositories 。

2.輸入 Repository 的名字,點選 Create Repository。

3.點選 create a new file。

4.輸入檔名和貼上 AI 產生的 JSON。

5.點選右上方的 Commit changes ( 之後若想再新增 JSON,可點選 Add file 的 create new file。)

取得 JSON API 的網址

進入剛剛建立的 JSON 頁面,點選右上方的 Raw。

此時顯示的才是 JSON 內容的真正頁面,瀏覽器網址才是我們可抓取 JSON 的 API 網址。

https://raw.githubusercontent.com/wenwen0128/demoJay/main/song.json

使用 completion handler 解碼

let urlString = "https://raw.githubusercontent.com/wenwen0128/demoJay/main/song.json"
if let url = URL(string:urlString){
do {
let data = try Data(contentsOf: url)
if let name = String(data: data, encoding:.utf8){
print(name)
}
}catch {
print(error)
}
}
用 playground 測試成功解碼 !!

接下來要做的 app 都是建立在能成功抓取並解碼 JSON 才能繼續往下做的,因此花了很多時間了解觀念希望之後用第三方 API 的作業能結合 table 做出一個功能比較完整的 app。

--

--