良好的URI设计的一些基本原则
- 不要使用查询参数来更改状态。
- 不要使用大小写混用的路劲除非有必要,最好的都是小写字母。
- 不要使用实现特定的扩展你的URI(php,py,PL,等。)
- 不要让你的URI有远程过程调用(RPC)的缺陷
- 尽可能多地限制URI空间。
- 保持路径段短
- 最好用/resource或者/resource/;同时为你没有用到的路径创建301重定向
- 使用查询参数对于一个子资源的选择;如分页、搜索查询
- 不要在URL中填写任何东西,应该放在HTTP头或正文中去。
(注意:我没有说“RESTful URI设计”;URI本质上是不透明的REST。)
HTTP方法选择的11个基本原则:
- 永远不要GET去改变状态;这会让Googlebot毁掉你的一天
- 不要用PUT,除非你要更新整个resource
- 不要用PUT,除非你可以一直合法的用GET在同一个URI上
- 不要用POST来检索信息,那是长效的并且可能被缓冲
- 不要执行一个操作是非幂等的PUT
- 尽可能使用get
- 当不确定使用PUT还是POST时,优先使用POST
- 要使用POST当你需要做一些类似RPC时
- 对类较大或层次的资源使用PUT
- 删除资源时,优先选择DELETE而不是POST
- 在做计算之类的请求时,优先使用GET;除非你的INPUT很大,这是你可以考虑使用POST
Web服务中HTTP设计的一般原则:
- 不要将元数据放在body中,应该放在header中。
- 不要将元数据放在单独的资源中,除非当包含元数据时会造成很大的开销。
- 使用适当的状态码
- 201 Created指创建资源时;在发送响应时资源必须存在
- 202 Accepted指成功执行一个操作或异步创建资源
- 400 Bad Request指当有人用伪造的数据进行操作;应用程序可能是一个验证错误;一般保存为500的未捕获的异常
- 401 Unauthorized指当某人访问您的API时,未提供必要的授权header或授权中的凭据无效时;如果您不希望通过授权header来进行凭证,则不要使用此响应代码。
- 403 Forbidden指当某人恶意或未经授权的方式访问你的API时
- 405 Method Not Allowed指当本来必须用PUT,而有人却POST时,等等
- 413 Request Entity Too Large指当某人试图发送一个无法接收的大文件时
- 418 I’m teapot 指当我试图用茶壶冲泡咖啡时
- 尽可能使用缓存Headers
- ETag headers让你很容易的将资源设置为哈希值
- Last-Modified向你表明,保留资源更新时的时间戳是一个好主意。
- Cathe-Control和Expires应该有一个合理的值。
- 尽一切可能执行请求中的缓存headers(If-None-Modified, If-Modified-Since)
- 使用重定向的时一定要有意义,但这应该是罕见的Web服务