iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 7
1

https://res.cloudinary.com/practicaldev/image/fetch/s--DEO88yM9--/c_imagga_scale,f_auto,fl_progressive,h_500,q_auto,w_1000/https://dreamix.eu/blog/wp-content/uploads/2017/11/cryptocurrencies1.png
做為一個看著Internet發展的開發人員,Web API是最讓我激動的一項發明。過去我寫過像Socket API, Web Service, Remoting Service..等等,複雜的設計以及令人頭疼的協定問題,每次都讓我覺得心煩。而Web API及Restful api的發展,將難度降低,且讓開發人員可以專注在自身要做的事情上,而且彈性更大,讓更多開發人員願意投身在後端或全端開發當中。
然而,就這麼一個簡單的東西,在命名上還是有些東西要注意:

URI上的東西一定是名詞

有別於以往在Web API或Web Service上會針對各別資料做CRUD的方法給前端使用,RESTful API最大的特點就是他把對資料操作的CRUD用POST, GET, PUT, DELETE來處理,不像傳統API必需個別開放介面來操作,所以在URI上不再會有動作,只有資源,因此在設計URI時,他只會有名詞,不會有動詞。

PUT
https://myapi.com/users/184729

就算有動詞,也是被名詞化的動詞,或者變成形容詞的動詞。

GET
https://myapi.com/readmessages 

(取得己讀的訊息)

不要掉S!

RESTful API最重要的特點就是他可以透過URI去存取資源,而他的設計是先取得全部,再取得個別的資源,例如我要取得鐵人賽的文章,URI的設計是

GET
https://myapi.com/iron-man-12th/articles

而要取得某個單篇文章,則是

GET
https://myapi.com/iron-man-12th/articles/10234827

所以,資源層一定是複數,請不要掉S,如果沒有很有把握它的複數型是S還是ES,請查字典。
(說個小故事,我不知道新北市政府把牌子改好了沒,新北市府大廳的樓梯的英文原本是拼成"Staires",後來我去反應,他們才用貼紙改成"Stairs",但那是十幾年前的事了。)
https://attach.setn.com/newsimages/2018/08/25/1513464-PH.jpg
但這個規則就有點麻煩了:如果他是不可數名詞怎麼辦?因此查字典就很重要了。
照理來說啦!因為Restful API操作的都是可數的東西,但如果發現打算用的詞是不可數名詞,例如:money, equipment.這些都是不可數名詞。比較好的做法是找到其他替代字,並且是可數的名詞。
https://ithelp.ithome.com.tw/upload/images/20200908/20111458gErj7h9eqy.png
而有些字可能同時具備可數及不可數的型態,那更要注意它的可數字意是否是這個API要表達的,例如Water的複數型指的是"海洋, 河流,或近海區域"
https://ithelp.ithome.com.tw/upload/images/20200908/20111458viMdaO9iHZ.png
英文水很深的啊...

沙威馬命名(kebab-case)

因為是URI,通常沒有大小寫的分別,因此比較適合的命名法是kebab-case,而且是全小寫。如果伺服器有做區隔大小寫,建議也是放在api設計外的地方,例如針對變數或者加密的地方處理。

RESTful API是個很棒的設計,如果設計得當可以讓串接API的工程師馬上可以取得相關的資訊,你也有在寫RESTful API嗎?分享一下設計的經驗吧!


上一篇
Day 6 -[名詞五]Enumerated type,列舉形態
下一篇
Day8 - [名詞七] 儲存媒體命名 - 資料庫、持久層或暫存資料的命名
系列文
邁向專業軟體工程師必修的英文課30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 則留言

1
sx0800
iT邦新手 1 級 ‧ 2020-09-10 00:00:28

頭暈! 這到底是在學英文還是寫程式。

我要留言

立即登入留言