• Restful规范


    一、   URI

    URI规范

    1.不用大写;

    2.用中杠 - 不用下杠 _ 

    3.参数列表要encode

    4.URI中的名词表示资源集合,使用复数形式。

    5.RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词(特殊情况可以使用动词),而且所用的名词往往与数据库的表格名对应

    6.接口尽量使用名词,禁止使用动词

     

    资源集合 vs单个资源

     

    URI表示资源的两种方式:资源集合、单个资源

     

    资源集合:

     

           /zoos //所有动物园

     

           /zoos/1/animals //id1的动物园中的所有动物

     

    单个资源:

     

           /zoos/1//id1的动物园

     

           /zoos/1;2;3//id123的动物园

     

     

    避免层级过深的URI

     

    url中表达层级,用于 按实体关联关系进行对象导航 ,一般根据id导航。

     

    过深的导航容易导致url膨胀,不易维护,如 GET /zoos/1/areas/3/animals/4 ,尽量使用查询参数代替路径中的实体导航,如 GET/animals?zoo=1&area=3 

     

    常见过滤参数

     

    • ?limit=10:指定返回记录的数量
    • ?offset=10:指定返回记录的开始位置。
    • ?page=2&per_page=100:指定第几页,以及每页的记录数。
    • ?sortby=name&order=asc:指定返回结果按照哪个属性排序,以及排序顺序。
    • ?animal_type_id=1:指定筛选条件

     

     

     

    二、   版本

     

    应该将API的版本号放入到URI

     

               https://api.example.com/v1/zoos

     

     

    三、 Request

     

    HTTP方法

     

    通过标准HTTP方法对资源CRUD

     

    GET:查询(从服务器取出资源一项或多项)

     

    GET /zoos

     

    GET /zoos/1

     

    GET/zoos/1/employees

     

    POST:创建单个新资源。 POST一般向资源集合uri发起

     

    POST/animals  //新增动物

     

    POST/zoos/1/employees //id1的动物园雇佣员工

     

    PUT:更新单个资源(全量),客户端提供完整的更新后的资源。与之对应的是 PATCHPATCH负责部分更新,客户端提供要更新的那些字段。 PUT/PATCH一般向单个资源uri发起

     

    DELETE:删除

    DELETE/zoos/1/employees/2

    DELETE/zoos/1/employees/2;4;5

    DELETE/zoos/1/animals  //删除id1的动物园内的所有动物

     

    状态码

     

        服务器向用户返回的状态码和提示信息,常见的有以下一些(方括号中是该状态码对应的HTTP动词)。

     

    §200 OK - [GET]:服务器成功返回用户请求的数据,该操作是幂等的(Idempotent)。

     

    §201 CREATED - [POST/PUT/PATCH]:用户新建或修改数据成功。

     

    §202 Accepted - [*]:表示一个请求已经进入后台排队(异步任务)

     

    §204 NO CONTENT - [DELETE]:用户删除数据成功。

     

    §400 INVALID REQUEST - [POST/PUT/PATCH]:用户发出的请求有错误,服务器没有进行新建或修改数据的操作,该操作是幂等的。

     

    §401 Unauthorized - [*]:表示用户没有权限(令牌、用户名、密码错误)。

     

    §403 Forbidden - [*] 表示用户得到授权(与401错误相对),但是访问是被禁止的。

     

    §404 NOT FOUND - [*]:用户发出的请求针对的是不存在的记录,服务器没有进行操作,该操作是幂等的。

     

    §406 Not Acceptable - [GET]:用户请求的格式不可得(比如用户请求JSON格式,但是只有XML格式)。

     

    §410 Gone -[GET]:用户请求的资源被永久删除,且不会再得到的。

     

    §422 Unprocesable entity - [POST/PUT/PATCH] 当创建一个对象时,发生一个验证错误。

     

    §500 INTERNAL SERVER ERROR - [*]:服务器发生错误,用户将无法判断发出的请求是否成功。

     

     

    分页

     

    {
      "page": 1,            # 当前是第几页
      "pages": 3,           # 总共多少页
      "per_page": 10,       # 每页多少数据
      "has_next": true,     # 是否有下一页数据
      "has_prev": false,    # 是否有前一页数据
      "total": 27           # 总共多少数据
    }

     

     

    、Response

    {
    data : { // 请求数据,对象或数组均可
    user_id: 123,
    user_name: "tutuge",
    user_avatar_url: "http://tutuge.me/avatar.jpg"
    ...
    },
    msg : "done", // 请求状态描述,调试用
    code: 1001, // 业务自定义状态码
    extra : { // 全局附加数据,字段、内容不定
    type: 1,
    desc: "签到成功!"
    }
    }

    返回结果用data字段作为key

     

    错误处理

     

    如果状态码是4xx,就应该向用户返回出错信息。一般来说,返回的信息中将error作为键名,出错信息作为键值即可。

     

     

    {
        error: "Invalid API key"
    }

     

     

    参考网址:

    http://tutuge.me/2016/05/02/design-json-api-respoense/

    http://vb2005xu.iteye.com/blog/2304843

    https://blog.csdn.net/bossaiaboy/article/details/64126334

    https://blog.csdn.net/chenxiaochan/article/details/73716617

    http://www.ruanyifeng.com/blog/2014/05/restful_api.html

    https://www.jianshu.com/p/8b769356ee67

    https://blog.csdn.net/u013731455/article/details/56278168

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    在线漏洞检测网站
    渗透测试工具库
    端口利用解析
    Linux安全脚本
    Linux常见系统故障
    Oracle
    Redis和MongoDB区别
    MHA在监控和故障转移时都做了什么
    Oracle 11g Dataguard参数详解
    Oracle
  • 原文地址:https://www.cnblogs.com/yanduanduan/p/9123853.html
Copyright © 2020-2023  润新知