RESTful API设计
1.总使用HTTPS协议
2.域名
子域名:api.wython.com (存在跨域问题) url: www.wython.com/api/
3.版本
www.wython.com/api/v1 www.wython.com/api/v2
4.路径,视网络上的任何东西为资源,均使用名词表示(也可是复数)
www.wython.com/api/v1/order www.wython.com/api/v1/animals
5.请求方式methon不同
GET:从服务器取资源 POST: 在服务器新建资源 PUT: 更新资源(全部更新,例用户表更新用户名,密码,有邮箱) PATCH: 更新资源(局部更新,只更新用户名或密码) DELETE: 删除资源
6.过滤,通过url上传参的形式传递搜索条件
www.wython.com/api/v1/order?page=1 指定返回第几页以及每页的记录
7.状态码
2xx 操作成功 3xx 重定向 301 永久重定向 302 临时重定向 4xx 客户端访问错误 400 请求资源不存在,输错地址之类的 401 用户没有得到访问权限 403 Forbidden 表示用户得到授权但访问被禁止 5xx 服务端错误
8.错误处理,返回错误信息error方做key
9.返回结果,针对不同操作,服务器向用户返回的结果应符合一下规范
GET/collction: 返回资源对象的列表 GET/collction/resource: 返回单个资源对象 POST/collction: 返回新生成的资源对象 PUT/collction/resource: 返回完整的资源对象 PATCH/collction/resource: 返回完整的资源对象 DELETE/collction/resource:返回一个空文档
10.Hypermedia API,返回结果中提供链接,连向其他API方法,使得用户不查看文档也知道下一步应该做什么
摘自:http://www.ruanyifeng.com/blog/2014/05/restful_api.html
比如,当用户向api.example.com的根目录发出请求,会得到这样一个文档。 {"link": { "rel": "collection https://www.example.com/zoos", "href": "https://api.example.com/zoos", "title": "List of zoos", "type": "application/vnd.yourformat+json" }} 上面代码表示,文档中有一个link属性,用户读取这个属性就知道下一步该调用什么API了。rel表示这个API与当前网址的关系(collection关系,并给出该collection的网址),href表示API的路径,title表示API的标题,type表示返回类型。 Hypermedia API的设计被称为HATEOAS。Github的API就是这种设计,访问api.github.com会得到一个所有可用API的网址列表。 { "current_user_url": "https://api.github.com/user", "authorizations_url": "https://api.github.com/authorizations", // ... } 从上面可以看到,如果想获取当前用户的信息,应该去访问api.github.com/user,然后就得到了下面结果。 { "message": "Requires authentication", "documentation_url": "https://developer.github.com/v3" } 上面代码表示,服务器给出了提示信息,以及文档的网址。