Konglx +

REST API 设计

设计简洁易懂的API对前后端的同学都是极有好处的,对后端同学来说,简洁的设计可以减少本就复杂的API设计及与前端同学交流沟通的成本, 而对前端同学来说,易于理解的API是提高编程效率的手段之一。

规避API设计误区

我们在设计API设计的时候经常忽略掉的一个问题就是API之前缺少关联性。 例如: 如果想获得商品列表, 通过AJAX请求GET /categories; 如果想获取某个分类中的商品GET /getProductListFromCate?category_id=id ; 如果想获取多个分类中的商品, 要使用GET /productInCategories?values=id_1, id_2,...id_n; 如果保存商品的描述,要使用POST /product, 同时在请求总体(body)中添加大量的JSON数据; 可能你已经习惯了这样的API设计,可这样的设计的有些怎么样的缺点呢:

REST

具象状态传输(英文:Representational State Transfer,简称REST)是Roy Thomas Fielding博士于2000年在他的博士论文 “Architectural Styles and the Design of Network-based Software Architectures” 中提出来的一种万维网软件架构风格。 需要注意的是,REST是设计风格而不是标准。REST通常基于使用HTTPURI,和XML以及HTML这些现有的广泛流行的协议和标准。

  • 资源是由URI来指定。
  • 对资源的操作包括获取、创建、修改和删除资源,这些操作正好对应HTTP协议提供的GET、POST、PUT和DELETE方法。
  • 通过操作资源的表现形式来操作资源。
  • 资源的表现形式则是XML或者HTML,取决于读者是机器还是人,是消费web服务的客户软件还是web浏览器。当然也可以是任何其他的格式。

从百科上的定义我们可以看到一个很明显的事实,即资源的重要性。在REST中,资源是一切信息的抽象。请牢记这一点。

基于REST的API设计的通用指导规范

1. 端点的名称

除前缀的域名外的部分

2. HTTP方法与CRUD操作的对应关系

一个极端的例子,如果你的网站有删除的功能,并且使用的是GET方法,那么你的网站将有风险会被爬虫删除网站里的内容。

一些典型的设计

方法 端点 说明
GET /products 获取一系列商品
GET /products/:id 通过id获取某个商品
GET /products/:id/parts 获取某个商品的某个部件
PUT /products/:id/parts 为某个商品添加一个新部件
DELETE /products/:id 删除某个指定id的商品
PUT /products 添加一个新商品
HEAD /products/:id 通过状态码(200 或者 404)判断指定商品是否存在
PATCH /products/:id 编辑指定id对应的商品
POST /auth/login 多数其他的应该使用POST方法

为API编写文档

可以学习一下github的api。

Blog

Opinion

Project