zoukankan      html  css  js  c++  java
  • Web 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

  • 相关阅读:
    Redis单点登录
    MySQL有哪些存储引擎,各自的优缺点,应用场景
    MySQL慢查询优化、索引优化、以及表等优化总结
    Redis缓存和MySQL数据一致性方案详解
    Jenkies+github实现代码自动构建
    Python基础-day14-单元测试注册小例子
    Python基础-day13-unitest框架(Suite、runner)及生成报告,附带最新的HTMLTestRunnerNew.py文件
    Python基础-day11-继承和动态设置属性
    Python基础-day10-类的创建和调用
    Python基础-day03 字符串
  • 原文地址:https://www.cnblogs.com/50614090/p/6184152.html
Copyright © 2011-2022 走看看