WEB学习笔记PHP学习笔记PHP

设计更好的Web API

2019-02-12  本文已影响239人  赵客缦胡缨v吴钩霜雪明

不知道你的身边是不是经常有人抱着这样的观点 —— “接口能调通就行了,反正用户看不到,别管是不是规范、是不是好看了”。事实上,API 设计本来就不是给用户看的,而是给开发人员看的。
做好 API 设计并不需要耽误很多的时间,但是把 API 设计得足够规范,让开发者一眼就能看出来每一个模型每一个字段的意义和用法,一方面可以减少大量的写 API 文档的工作量,可以很大程度上减少对接的双方的沟通成本;另一方面好的 API 设计很容易做抽象,对接双方都能复用大量的代码。各个接口大致都是相同的,但是就是没法抽象,必须每个都复制粘贴然后要做一些修改,这种情况也会得到改善。

先来看一些 Web API 设计的反例,大部分是实际工作中遇到的:

以上说了这么多反面教材,接下来是一些我总结的一些好的 Web API 设计模式,主要是 HTTP RESTful 风格的 API。如果是用 GraphQL 或者一些云厂商的 SDK 比如 AWS Web SDK、Firebase Web SDK 等类似于 RPC 的模式,也有部分可以参考。

命名规范

命名风格

我推荐的风格是数据库字段、API 接口名、字段名等使用小写字母 + 下划线做分割的模式,也叫 snake_case,以下解释为什么:

字段设计

字段可以分为数据实例字段和数据模型字段。数据实例字段场景的就是 ID、创建时间、修改时间等:

以及数据模型字段的设计风格:

路由设计

我的建议是参考 Rails 的路由设计。Rails 是 MVC Web 后端框架的开山鼻祖,很多其他语言的框架比如 Laravel、Django、Spring 等或多或少都有“借鉴” Rails 的成分。以下是我在 Rails 官方文档上关于资源型数据的路由的设计规范的基础上增加了部分内容的表格:

HTTP Verb Path Controller#Action Usage
前端&后端 GET /photos photos#index 展示照片列表
前端 GET /photos/new photos#new 展示“新建照片”表单
后端 POST /photos photos#create 提交新建表单
前端&后端 GET /photos/:id photos#show 展示某个 id 的照片
前端 GET /photos/:id/edit photos#edit 展示编辑某个 id 的照片的表单
后端 PATCH/PUT /photos/:id photos#update 提交编辑表单
后端 DELETE /photos/:id photos#destroy 提交删除某个 id 照片的操作

为什么要这样做:

总结

设计好的 Web API 并没有想象的那么难,需要设计者去参考自己所用的那个框架的设计规范,以及参考流行框架的设计思路。如果遇到现有规范里没有的情况而需要自己设计的时候,一方面是参考主流框架、主流公司的 API 的做法,另一方面是要把“抽象”和“易读”落实到设计中去。

上一篇下一篇

猜你喜欢

热点阅读