RESTful Web Services中API的设计原则(转)
当下前后端分离的设计已经是web app开发的标配,但是如何设计一个强壮,扩展性好,又规范的API呢
参考以下link,可以得到需要有益的启示。同时个人推荐一本书《web API的设计和开发》,作者是岛国人,内容一贯的通俗易懂。
http://blog.csdn.net/daxia_85/article/details/50597005
1:每个实体对象仅需要两个URL (响应速度每个对象仅需要两个url,第一个是获取对象的集合,第二个是获取单个对象)
- /books/2 # for Single Object
- /books # for Collections
2: 使用名词代替动词
- /books/2 # Good :)
- /getBook?id=2 # Bad :(
3:正确使用HTTP方法
- GET # Read
- POST # Create
- PUT # Update
- DELETE # Delete
4:对象间的关联关系
- /books/2/author # book author 查询编号为2的书的作者是谁
- /author/1/books # author's bo 查询编号为1的作者写了哪些书
5:数据分页
- /books?start=10&count=20 # return the books from 10 to 30
6:返回需要的参数
/books/2?fields=author,isbn,price # only return the book's author, isbn and price
7:版本管理
- GET /books/2 # version 1
- GET /v2/books/2 # version 2
REST的优点
-
可更高效利用缓存来提高响应速度
-
通讯本身的无状态性可以让不同的服务器的处理一系列请求中的不同请求,提高服务器的扩展性
-
浏览器即可作为客户端,简化软件需求
-
相对于其他叠加在HTTP协议之上的机制,REST的软件依赖性更小
-
不需要额外的资源发现机制
-
在软件技术演进中的长期的兼容性更好
关于状态
应该注意区别应用的状态和连接协议的状态。HTTP连接是无状态的(也就是不记录每个连接的信息),而REST传输会包含应用的所有状态信息,因此可以大幅降低对HTTP连接的重复请求资源消耗。