什么是好的 Web Api

PS:本系列文章,是将 让 Java 再次伟大 产品中的设计哲学进行提取,再加工后输出的内容。

web api 就像一张名片一样,专业的名片可以迅速帮助你与客户之间建立信任感,也可能让你的产品在被使用前,就给客户留下业余,糟糕的负面印象。而一旦客户对你的产品产生负面情绪,这种情绪就会蔓延到产品生态圈甚至于相关公司上。

什么是优雅的 Web Api

类似设计模式的精髓在于设计原则,而非模式的生搬硬套一样,优雅的 Web Api 有两个重要原则:

  • 设计规范明确的内容必须遵守相关规范
  • 没有设计规范的内容必须遵守相关事实标准

给自己一些时间,认真阅读并体会上面两个重要原则。

厂名uri备注
Twitterapi.twitter.com/1.1“治国理政平台”
Google Calendarwww.googleapis.com/calendar/v3“大厂”
instagramapi.instagram.com/v1/usrs/search?q=jack“宠物自拍网站”
linkedinapi.linkedin.com/v1/people-search“招工”
Tumblrapi.tumblr.com/v2“汤不乐”
foursquareapi.foursquare.com/v2/venues/search?q=apple&categoryId=asad123456“基于地理位置社交”

如何设计出国际范儿的 Api 端点?

背口诀

观察和分析上一小节中的国际大厂的设计往往都具备以下几个特点:

  • 短小便于输入的 URI。

    没人喜欢复杂的单词。

  • 人可以读懂的 URI。

    名片是拿给人读的。不要把机器码和 16 进制写到 URI 里。

  • 没有大小写混用的 URI。

    实际上一般的事实规范是建议全部小写。

  • 修改方便的 URI。

    api.sample.com/user/:id 傻子都看的出来通过变量 id 可以访问不同的用户信息。

  • 不会暴露服务端架构的 URI。

    api.sample.com/servlet/login.do 这样的代码傻子都知道后端是用面向环境编程的语言写的。

  • 规则统一的 URI。

    api.com.cn/Api/user-InfoById/info.json

  • 当端点里出现两个以上的单词时,使用脊柱法(连词符号)。

    api.linkedin.com/v1/people-search

合理利用 REST API

针对 WEB API 的发展以及广义 REST 与 狭义 REST 的特点, Martin Fowler 提出在达到完美的 REST API 之前有以下几种 API 的设计级别。

  • REST LEVEL0: 使用 HTTP
  • REST LEVEL1: 引入资源的概念
  • REST LEVEL2: 引入 HTTP 动词
  • REST LEVEL3: 引入 HATEOAS 概念

以此理论作为基础,再参照上述 REST LEVEL,我们可以设计一个符合 REST LEVEL2 标准的示例 URI

目的端点方法
获取用户信息列表api.example.com/v1/usersGET
新用户注册api.example.com/v1/usersPOST
获取特定用户信息api.example.com/v1/users/:idGET
更新用户信息api.example.com/v1/users/:id/PUT/PATCH
删除用户信息api.example.com/v1/users/:idDELETE

从今以后,你的 WEB API 只要参照以上示例设计,那就是符合基本标准,也很难被吐槽的 WEB API。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值