协议
使用https协议。
URL
- 在RESTful架构中,每个路径代表一种资源,所以路径中不能有动词,只能有名词。所用名词尽量参考数据库表的设计。
- URL路径名词均为复数。为了保证URL格式的一致性,建议使用复数形式。
- 应该使用连字符”-“来提高URL的可读性,而不是使用下划线”_“。
- URL路径中首选小写字母。
- 将版本信息放入URL中。
http请求方式
- GET: 从服务器取出资源(一项或多项)
- POST: 在服务器新建一个资源
- PUT: 在服务器更新资源(客户端提供改变后的完整资源)
- PATCH: 在服务器更新资源(客户端提供改变的属性)
- DELETE: 从服务器删除资源
过滤信息
在获取资源的时候,有可能需要获取某些“过滤”后的资源,例如指定前10行数据:
http://api.user.com/schools/grades/classes/boys?page=1&page-size=10
数据格式
使用json数据格式进行数据传递。
状态码
RESTful架构应该遵循统一接口原则,统一接口包含了一组受限的预定义的操作,不论什么样的资源,都是通过使用相同的接口进行资源的访问。接口应该使用标准的HTTP方法如GET,PUT和POST,并遵循这些方法的语义。
如果按照HTTP方法的语义来暴露资源,那么接口将会拥有安全性和幂等性的特性,例如GET和HEAD请求都是安全的,无论请求多少次,都不会改变服务器状态。而GET、HEAD、PUT和DELETE请求都是幂等的,无论对资源操作多少次,结果总是一样的,后面的请求并不会产生比第一次更多的影响。
下面列出了GET,DELETE,PUT和POST的典型用法:GET
- 安全且幂等
- 200(OK) 表示已在响应中发出
- 204(无内容) 资源为空
- 301(Moved Permanently) 资源的URL已被更新
- 303(See Other) 其他(如,负载均衡)
- 304(not modified)资源未更改(缓存)
- 400 (bad request)指代坏请求
- 404 (not found)资源不存在
- 406 (not acceptable)服务端不支持所需表示
- 500 (internal server error)通用错误响应
- 503 (Service Unavailable)服务端当前无法处理请求
POST
- 不安全且不幂等
- 200(OK)如果现有资源已被更改
- 201(created)如果新资源被创建
- 202(accepted)已接受处理请求但尚未完成(异步处理)
- 301(Moved Permanently)资源的URL被更新
- 303(See Other)其他(如,负载均衡)
- 400(bad request)指代坏请求
- 404 (not found)资源不存在
- 406 (not acceptable)服务端不支持所需表示
- 409 (conflict)通用冲突
- 412 (Precondition Failed)前置条件失败(如执行条件更新时的冲突)
- 415 (unsupported media type)接受到的表示不受支持
- 500 (internal server error)通用错误响应
- 503 (Service Unavailable)服务端当前无法处理请求
PUT
- 不安全但幂等
- 200 (OK)如果现有资源已被更改
- 201 (created)如果新资源被创建
- 301(Moved Permanently)资源的URL已更改
- 303 (See Other)其他(如,负载均衡)
- 400 (bad request)指代坏请求
- 404 (not found)资源不存在
- 406 (not acceptable)服务端不支持所需表示
- 409 (conflict)通用冲突
- 412 (Precondition Failed)前置条件失败(如执行条件更新时的冲突)
- 415 (unsupported media type)接受到的表示不受支持
- 500 (internal server error)通用错误响应
- 503 (Service Unavailable)服务端当前无法处理请求
DELETE
- 不安全但幂等
- 200 (OK)资源已被删除
- 301 (Moved Permanently)资源的URIL已更改
- 303 (See Other)其他(如,负载均衡)
- 400 (bad request)指代坏请求
- 404 (not found)资源不存在
- 409 (conflict)通用冲突
- 500 (internal server error)通用错误响应
- 503 (Service Unavailable)服务端当前无法处理请求