1.良好的API设计应旨在支持:
(1)平台独立性。不管API内部实现方式如何,任何客户端都应该能调用该API。这就需要使用标准协议并非创建一种机制,使客户端和web服务能够就交换数据的格式达成一致。
(2)服务演变。Web API应能在不影响客户端应用程序的使用情况下改进和添加功能。随着API的发展,现在客户端应用程序应可继续运行而无需进行任何修改。所有功能应该是可发现的,使客户端应用程序能够充分利用它。
2.什么是REST?
REST是一种基于超媒体构建分布式系统的架构风格。一种接口设计模式。REST独立于任何基础协议,不一定要绑定到HTTP。但是常见的REST API实现会使用HTTP作为基础协议。
3.基于HTTP设计RESTful API时的一些主要原则:
(1)围绕资源设计。
(2)每个资源都有一个标识符。
(3)客户端通过交换资源的表现形式来与服务交互,许多API使用JSON作为交换格式。
(4)使用统一接口,有助于分离客户端和服务的实现(包括的常见操作:GET,POST,DELETE,PUT)。
(5)无状态请求模型,无法保留请求之间的瞬时状态信息。
(6)由表示形式中包含的超媒体连接驱动。
4.Web API成熟模型
级别0:定义一个URI,所有操作是对此URI发出的POST请求。
级别1:为各个资源单独创建URI。
级别2:使用HTTP方法来定义对资源操作的执行。
级别3:使用超媒体
5.围绕资源组织API设计
设计侧重于业务实体,URI名称应基于名词,无需基于的那个物理数据项,无需让用户知道相关数据表,总之就是不让用户知道后端具体实现以及数据库内部结构。REST旨在为实体建模,以及为应用程序可对这些实体执行的操作建模,不应该将内部实现公开给客户端。
6.命名规则
引用集合的URI常用复数名词,集合和项之间有层次结构,不同类型之间相互关联:
例:/customers (获取所有用户)
/customers/5 (获取id为5的用户)
/customer/5/orders(获取id为5的用户的所有订单)
如果URI过于复杂建议按功能拆分。
当然URI越多,请求越多,负载越大,所以也要尽量避免大量的小型URI,可以考虑数据非规范化,尽量发少量请求获取到用户所需资源。
总之还是要在URI复杂程度,URI数量以及数据量之间权衡。
7.根据HTTP方法定义API
8.媒体类型
客户端和服务器交换资源的表示形式。HTTP协议中,格式是使用媒体类型(也称MIME类型)指定的。对于非二进制数据,大多数Web API支持JSON类型(媒体类型=application/json),可能支持XML(媒体类型=application/xml),请求或响应中的Content-Type标头指定表示形式的格式。如果服务器不支持媒体类型,则返回状态码415(不支持的媒体类型)。