Web API 入门系列 - RESTful API 设计指南
参考:https://developer.github.com/v3/ https://github.com/bolasblack/http-api-guide
HTTP 协议
目前使用HTTP1.1协议,为了通信安全,建议使用https协议
域名
尽量使用专业域名,如 https://api.github.com
也可以使用主域名,如 https://www.github.com/api
API版本
放在请求头里,如Accept: application/vnd.github.v3+json 这种方案URL比较优雅,表示同一资源,github api 推荐这样使用。
URL地址
在RESTful架构中,每个网址代表一种资源,用名称复数形式,不要用动词。
如应该使用: https://api.github.com/books 不应该使用:https://api.github.com/getbooks
过滤分页
分页:?page=2&per_page=100: 如:https://api.github.com/user/repos?page=2&per_page=100 如果没有传递时,使用默认配置。排序:?sortby=name&order=asc: 如:https://api.github.com/user/repos?page=2&per_page=100&sortby=name&order=asc 如果没有传递时,使用默认配置。
过滤:?username=1 如:https://api.github.com/user/repos?username=1
HTTP 动词
Restful 风格的程序推荐使用 http verbs 来操作服务器资源,让资源发生状态转变。
关于方法语义的说明:
GET: 用于从服务器获取某个资源的信息
完成请求后返回状态码 200 OK
完成请求后需要返回被请求的资源详细信息
POST: 用于创建新资源
创建完成后返回状态码 201 Created
完成请求后需要返回被创建的资源详细信息
PUT: 用于完整的替换资源或者创建指定身份的资源,比如创建 id 为 123 的某个资源
如果是创建了资源,则返回 201 Created
如果是替换了资源,则返回 200 OK
完成请求后需要返回被修改的资源详细信息
PATCH: 用于局部更新资源
完成请求后返回状态码 200 OK
完成请求后需要返回被修改的资源详细信息
DELETE: 用于删除某个资源
完成请求后返回状态码 204 No Content
异常处理
在调用接口的过程中,可能出现下列几种错误情况:
服务器维护中,503 状态码
HTTP/1.1 503 Service Unavailable
Retry-After: 3600
Content-Length: 41
{"message": "Service In the maintenance"}
发送了无法转化的请求体,400 状态码
HTTP/1.1 400 Bad Request
Content-Length: 35
{"message": "Problems parsing JSON"}
服务到期(比如付费的增值服务等), 403 状态码
HTTP/1.1 403 Forbidden
Content-Length: 29
{"message": "Service expired"}
因为某些原因不允许访问(比如被 ban ),403 状态码
HTTP/1.1 403 Forbidden
Content-Length: 29
{"message": "Account blocked"}
权限不够,403 状态码
HTTP/1.1 403 Forbidden
Content-Length: 31
{"message": "Permission denied"}
需要修改的资源不存在, 404 状态码
HTTP/1.1 404 Not Found
Content-Length: 32
{"message": "Resource not found"}
缺少了必要的头信息,428 状态码
HTTP/1.1 428 Precondition Required
Content-Length: 35
{"message": "Header User-Agent is required"}
发送了非法的资源,422 状态码
HTTP/1.1 422 Unprocessable Entity
Content-Length: 149
{
"message": "Validation Failed",
"errors": [
{
"resource": "Issue",
"field": "title",
"code": "required"
}
]
}
所有的 error 哈希表都有 resource, field, code 字段,以便于定位错误,code 字段则用于表示错误类型:
missing: This means a resource does not exist.
missing_field: This means a required field on a resource has not been set.
invalid: This means the formatting of a field is invalid. The documentation for that resource should be able to give you more specific information.
already_exists:This means another resource has the same value as this field. This can happen in resources that must have some unique key (such as Label names).
身份认证
使用OAuth 2.0验证,参考 http://www.ruanyifeng.com/blog/2014/05/oauth_2_0.html
Web API 入门系列 - RESTful API 设计指南的更多相关文章
- Hadoop MapReduce编程 API入门系列之挖掘气象数据版本2(十)
下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 这篇博文,包括了,实际生产开发非常重要的,单元测试和调试代码.这里不多赘述,直接送上代码. MRUni ...
- Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)
不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...
- Web服务器Raspkate的RESTful API
基于轻量型Web服务器Raspkate的RESTful API的实现 在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RE ...
- HBase编程 API入门系列之create(管理端而言)(8)
大家,若是看过我前期的这篇博客的话,则 HBase编程 API入门系列之put(客户端而言)(1) 就知道,在这篇博文里,我是在HBase Shell里创建HBase表的. 这里,我带领大家,学习更高 ...
- HBase编程 API入门系列之delete(客户端而言)(3)
心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. 前面的基础,如下 HBase编程 API入门系列之put(客户端而言)(1) HBase编程 API入门系列之get(客户端而言) ...
- HBase编程 API入门系列之get(客户端而言)(2)
心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. 前面是基础,如下 HBase编程 API入门系列之put(客户端而言)(1) package zhouls.bigdata.Hba ...
- HBase编程 API入门系列之HTable pool(6)
HTable是一个比较重的对此,比如加载配置文件,连接ZK,查询meta表等等,高并发的时候影响系统的性能,因此引入了“池”的概念. 引入“HBase里的连接池”的目的是: 为了更高的,提高程序的并发 ...
- Hadoop MapReduce编程 API入门系列之挖掘气象数据版本3(九)
不多说,直接上干货! 下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 下面是版本2. Hadoop MapReduce编程 API入门系列之挖掘气象数 ...
- Spark SQL 编程API入门系列之SparkSQL的依赖
不多说,直接上干货! 不带Hive支持 <dependency> <groupId>org.apache.spark</groupId> <artifactI ...
随机推荐
- 深入理解javascript事件流
摘要:事件流这个东西是比较重要的,为了让自己更加理解js中的事件流,必须整理整理,梳理一下事件流的各种东西啊.本文大部分内容参考<javascript高级程序设计第三版> 先来一段书里的原 ...
- linux下IPTABLES配置详解(转)
如果你的IPTABLES基础知识还不了解,建议先去看看. 开始配置 我们来配置一个filter表的防火墙. (1)查看本机关于IPTABLES的设置情况 [root@tp ~]# iptables - ...
- iOS开发Swift篇(01) 变量&常量&元组
iOS开发Swift篇(01) 变量&常量&元组 说明: 1)终于要写一写swift了.其实早在14年就已经写了swift的部分博客,无奈时过境迁,此时早已不同往昔了.另外,对于14年 ...
- 使用Android Studio打Andorid apk包的流程
启动Android studio 1.点击菜单栏Build -> Generate Signed APK...,打开如下窗口 2.这里是类似eclipse中Android的签名,假设这里没有 ...
- [C/C++] zltabout(带缩进的格式化输出)v1.0。能以相同的代码绑定到 C FILE 或 C++流
作者:zyl910 一.缘由 在写一些生成文本的程序时,经常需要使用带缩进的格式化输出的功能.以前为此写过不少类似的函数,可惜它们的可重用性很差. 这是因为——1) C语言的FILE*不支持重定向到自 ...
- linux部署war包方案
batch.sh内容: su - -c" 使用管理员权限 service tomcat6 stop; 停止tomca6t服务 mkdir /home/jnfwzFtp/bushubackup ...
- <后会无期>经典影评
先说明是转载,任何不同意见请对原作者表达,楼主不作任何回应,楼主影商极低,楼主觉得这二十几年来看的最好的电影是<一代宗师>,楼主只是觉得这篇影评精彩才发布上来让更多的人看到.原作者意见和楼 ...
- 删除windows系统中以前的设备(比如以前的网卡)或驱动的方法
1.在“开始”菜单单击“运行”,然后在“运行”对话框中输入“CMD”命令打开命令提示符窗口:2.在提示符窗口中输入“Set devmgr_show_nonpresent_devices=1”并回车:3 ...
- paypal之nodejs 框架 Kraken-js 源码分析
本文是基于 kraken-js 0.6.1 版本的 关于如何使用kraken-js 可以去看看官网的使用文档 点击这里 .kraken-js 是基于express之上的,目的在于让工程师更多的去关注代 ...
- .NET 4.6中的性能改进
.NET 4.6中带来了一些与性能改进相关的CLR特性,这些特性中有一部分将会自动生效,而另外一些特性,例如SIMD与异步本地存储(Async Local Storage)则需要对编写应用的方式进行某 ...