参考: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 设计指南的更多相关文章

  1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本2(十)

    下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 这篇博文,包括了,实际生产开发非常重要的,单元测试和调试代码.这里不多赘述,直接送上代码. MRUni ...

  2. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  3. Web服务器Raspkate的RESTful API

    基于轻量型Web服务器Raspkate的RESTful API的实现 在上一篇文章中,我们已经了解了Raspkate这一轻量型Web服务器,今天,我们再一起了解下如何基于Raspkate实现简单的RE ...

  4. HBase编程 API入门系列之create(管理端而言)(8)

    大家,若是看过我前期的这篇博客的话,则 HBase编程 API入门系列之put(客户端而言)(1) 就知道,在这篇博文里,我是在HBase Shell里创建HBase表的. 这里,我带领大家,学习更高 ...

  5. HBase编程 API入门系列之delete(客户端而言)(3)

    心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. 前面的基础,如下 HBase编程 API入门系列之put(客户端而言)(1) HBase编程 API入门系列之get(客户端而言) ...

  6. HBase编程 API入门系列之get(客户端而言)(2)

    心得,写在前面的话,也许,中间会要多次执行,连接超时,多试试就好了. 前面是基础,如下 HBase编程 API入门系列之put(客户端而言)(1) package zhouls.bigdata.Hba ...

  7. HBase编程 API入门系列之HTable pool(6)

    HTable是一个比较重的对此,比如加载配置文件,连接ZK,查询meta表等等,高并发的时候影响系统的性能,因此引入了“池”的概念. 引入“HBase里的连接池”的目的是: 为了更高的,提高程序的并发 ...

  8. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本3(九)

    不多说,直接上干货! 下面,是版本1. Hadoop MapReduce编程 API入门系列之挖掘气象数据版本1(一) 下面是版本2. Hadoop MapReduce编程 API入门系列之挖掘气象数 ...

  9. Spark SQL 编程API入门系列之SparkSQL的依赖

    不多说,直接上干货! 不带Hive支持 <dependency> <groupId>org.apache.spark</groupId> <artifactI ...

随机推荐

  1. 使用bee自动生成api文档

    beego中的bee工具可以方便的自动生成api文档,基于数据库字段,自动生成golang版基于beego的crud代码,方法如下: 1.进入到gopath目录的src下执行命令: bee api a ...

  2. Apple移动设备处理器指令集 armv6、armv7、armv7s及arm64

    Arm处理器,因为其低功耗和小尺寸而闻名,几乎所有的手机处理器都基于arm,其在嵌入式系统中的应用非常广泛,它的性能在同等功耗产品中也很出色. Armv6.armv7.armv7s.arm64都是ar ...

  3. PHP基础(一)

    <?php $expression = false; if($expression == true): ?> <p>This will show if the expressi ...

  4. android: SQLite 数据库的最佳实践

    6.5.1    使用事务 前面我们已经知道,SQLite 数据库是支持事务的,事务的特性可以保证让某一系列的操 作要么全部完成,要么一个都不会完成.那么在什么情况下才需要使用事务呢?想象以下场 景, ...

  5. Java 命名空间的由来和引入

    名字可视性(Name visibility) 名字管理对任何程序设计语言来说,都是一个重要问题.如果你在程序的某个模块里使用了 一个名字,而其他人在这个程序的另一个模块里也使用了相同的名字,那么怎样才 ...

  6. iOS 9 failed for URL: "XXX://@" - error: "This app is not allowed to query for scheme XXX" iOS 从APP里启动另一APP

    iOS 从C APP里启动 D APP 首先在D APP里设置 URL Schemes 在info.plist 文件里添加URL Schemes URL Types -->item0 --> ...

  7. ios面试总结-

    一 C语言方法的知识 1: const  static  voilite 修辞变量各代表什么意思? const  修辞的变量为常量,常量是不容许修改.  static  修辞的变量为静态变量,在内存中 ...

  8. 【linux】vim编辑器vim+taglist+ctags的配置

    很多linux软件开发实际上并不实在X window的情况下进行的,这时我们不可能启动基于X window的图形化窗口,在这一情况下我们所能使用的主要的编辑器是vim和emacs.(ps:emacs和 ...

  9. apache 80端口部属多站点配置

    1.在httpd.conf文件里启用虚拟主机功能,即去掉下面配置项前面的# #LoadModule vhost_alias_module modules/mod_vhost_alias.so 2..在 ...

  10. asp.net 后台获取flv视频地址进行播放

    源码下载:http://download.csdn.net/detail/njxiaogui/7609687 前台:.aspx <table> <tr> <td>& ...