做為一個看著Internet發展的開發人員,Web API是最讓我激動的一項發明。過去我寫過像Socket API, Web Service, Remoting Service..等等,複雜的設計以及令人頭疼的協定問題,每次都讓我覺得心煩。而Web API及Restful api的發展,將難度降低,且讓開發人員可以專注在自身要做的事情上,而且彈性更大,讓更多開發人員願意投身在後端或全端開發當中。
然而,就這麼一個簡單的東西,在命名上還是有些東西要注意:
有別於以往在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
(取得己讀的訊息)
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",但那是十幾年前的事了。)
但這個規則就有點麻煩了:如果他是不可數名詞怎麼辦?因此查字典就很重要了。
照理來說啦!因為Restful API操作的都是可數的東西,但如果發現打算用的詞是不可數名詞,例如:money, equipment.這些都是不可數名詞。比較好的做法是找到其他替代字,並且是可數的名詞。
而有些字可能同時具備可數及不可數的型態,那更要注意它的可數字意是否是這個API要表達的,例如Water的複數型指的是"海洋, 河流,或近海區域"
英文水很深的啊...
因為是URI,通常沒有大小寫的分別,因此比較適合的命名法是kebab-case,而且是全小寫。如果伺服器有做區隔大小寫,建議也是放在api設計外的地方,例如針對變數或者加密的地方處理。
RESTful API是個很棒的設計,如果設計得當可以讓串接API的工程師馬上可以取得相關的資訊,你也有在寫RESTful API嗎?分享一下設計的經驗吧!