zoukankan      html  css  js  c++  java
  • API规范约定

     为了高效开发,节约编写文档的成本,API服务使用Swagger来描述

    一、API设计原则

    • 控制API的粒度和数量
    • 命名要遵循简单、可读、统一原则;
    • 优先设计API,然后编码

    二、URL设计【针对后端开发】

    2.1 HTTP规范

      动词目前暂时以下面两种 HTTP 方法,对应 CRUD 操作。

    GET:读取(Read)
    POST:新建(Create,Update,Delete)
    PUT:更新(Update)
    PATCH:更新(Update),通常是部分更新
    DELETE:删除(Delete)

    2.2 命名规范

    • 简洁

    简洁

    繁琐

    captcha

    get-captcha-image

    info

    getUserInfo

    cars

    getAllCars

    • 可读

    可读好

    可读性差

    delete

    delete-sysuser

    add

    addDetIstr

    update

    updateDetIstr

    get

    appGetByNO

    2.3 API臃肿

    接口数量控制

    反对不经过设计的API,导致API接口失控,接口过多,影响前端调试。

    能合并的接口,尽量合并,不要写重复的接口

    一个类的接口不要超过6个,如下图所示:

    转存失败重新上传取消

    2.4 返回值规范

    • 禁止返回无效的字段,给前端人员增加联调的沟通成本的同时暴露底层信息。如下图所示:

    转存失败重新上传取消

    2.5 API接口注释规范

    转存失败重新上传取消

    三、HTTP状态码

    3.1 常用状态码

    2xx:操作成功
    4xx:客户端错误
    5xx:服务器错误

    完整状态码参看

    复制代码

    2xx 状态码
    200请求(或处理)成功
    201请求(或处理)失败
     
    4xx 状态码
    400 Bad Request:请求参数不完整或不正确。
    401 Unauthorized:未授权标识。
    403 Forbidden:用户通过了身份验证,但是不具有访问资源所需的权限。
    404 Not Found:所请求的资源不存在,或不可用。
    405 Method Not Allowed:用户已经通过身份验证,但是所用的 HTTP 方法不在他的权限之内。
    410 Gone:所请求的资源已从这个地址转移,不再可用。
    415 Unsupported Media Type:客户端要求的返回格式不支持。比如,API 只能返回 JSON 格式,但是客户端要求返回 XML 格式。
    422 Unprocessable Entity :客户端上传的附件无法处理,导致请求失败。
    429 Too Many Requests:客户端的请求次数超过限额。
     
    5xx 状态码
    一般来说,API 不会向用户透露服务器的详细信息,所以只要两个状态码就够了。
    500 Internal Server Error:客户端请求有效,服务器处理时发生了意外。
    503 Service Unavailable:服务器无法处理请求,一般用于网站维护状态。

    复制代码

    四、API返回格式规范

    4.1API 的请求格式

    1

    2

    3

    4

    5

    6

    7

    8

    http://{域名}/v1/{模块}/{动作}

    域名:https://localhost:5011 或者 http://localhost:5010 或者 https://api.stonecontact.com

    模块: controller名称,比如user。

    动作: 每个模块所实现的功能.。比如: add,delete 等.

      

    前端组件具体格式以饿了么官网的组件为规范,

    文档描述详见Swagger

    服务器返回状态码以.NET Core的HttpStatusCode对象为主,不够的可以进行扩展 

    4.2API 返回格式

      响应一级目录包含三个字段如下所示:code,message,data

    1

    2

    3

    4

    5

    {

     "code": 200,

     "message"""

     "data":    

    }

    4.2.1 服务器异常格式

    1

    2

    3

    4

    5

    {

     "code": 500,

     "message""内部请求出错!",

     "data": 0

    }

    4.2.2 验证返回错误格式

    1

    2

    3

    4

    5

    6

    7

    8

    9

    {

        "code": 400,

        "message""Validation errors",

        "data": [

            "'Color Name' 不能为空。",

            "ColorName is mandatory.(Length:0-50)",

            "'Color Name_ CN' 不能为空。"

        ]

    }

    4.2.3 列表格式

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    {

      "code": 200,

      "message""Operation success.",

      "data": {

        "grid": [

          {

            "colorID": 5,

            "colorName""White",

            "pri": 0,

            "updateTimeTag""2019-07-11T01:11:12.8490797Z",

            "colorName_CN""白色"

          },

          {

            "colorID": 6,

            "colorName""Red",

            "pri": 0,

            "updateTimeTag""2019-07-11T01:11:12.8496838Z",

            "colorName_CN""红色"

          },

          {

            "colorID": 7,

            "colorName""Multicolor",

            "pri": 0,

            "updateTimeTag""2019-07-11T01:11:12.8496915Z",

            "colorName_CN""混合"

          }

        ],

        "recordCount": 19

      }

    }

    4.2.4 权限格式

    1

    2

    3

    {

     "code": 401,

    }

    4.2.5 返回单个对象

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    {

        "code": 200,

        "message""Operation success.",

        "data": {

            "colorID": 4,

            "colorName""Brown",

            "pri": 0,

            "updateTimeTag""2019-07-11T01:06:20.0629948Z",

            "colorName_CN""棕色"

        }

    }

    4.2.6 树Tree格式

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    25

    26

    27

    28

    29

    30

    31

    32

    33

    34

    35

    36

    37

    38

    39

    40

    41

    42

    43

    44

    45

    46

    47

    48

    49

    50

    51

    52

    53

    54

    55

    56

    {

      "code": 200,

      "message""Operation success.",

      "data": [

        {

          "id": 365,

          "text""Stone Blocks",

          "pid": 0,

          "expanded"true,

          "leaf"true,

          "children": [

            {

              "id": 366,

              "text""Marble Blocks",

              "pid": 365,

              "expanded"true,

              "leaf"false,

              "children"null

            },

            {

              "id": 367,

              "text""Granite Blocks",

              "pid": 365,

              "expanded"true,

              "leaf"false,

              "children"null

            }

          ]

        },

        {

          "id": 172,

          "text""Stone Tiles & Slabs",

          "pid": 0,

          "expanded"true,

          "leaf"true,

          "children": [

            {

              "id": 173,

              "text""Alabaster Tiles & Slabs",

              "pid": 172,

              "expanded"true,

              "leaf"false,

              "children"null

            },

            {

              "id": 174,

              "text""BlueStone Tiles & Slabs",

              "pid": 172,

              "expanded"true,

              "leaf"false,

              "children"null

            }

          ]

        }

      ]

    }

    4.2.7 返回DropDownList格式

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    "code":200,

        "msg":"成功",

        "data":[

            {

                "text":"China",

                "value":"0"

            },

            {

                "text":"America",

                "value":"1"

            },

            {

                "text":"Canada",

                "value":"3"

            }

        ],

    5.3API 返回码

    API 返回码如下:

    API 返回码

    含义

    200

    请求成功

    40000

    验证错误

    500

    服务器端错误

    400

    资源找不到

    5.4内部服务调用接口

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    11

    12

    13

    14

    15

    16

    17

    18

    19

    20

    21

    22

    23

    24

    //1.Get调用方法

    //1.1带参数

    //Dictionary<string, object> param = new Dictionary<string, object>();

    //param.Add("PageSize", 20);

    //param.Add("PageIndex", 5);

    //var client = RestSharpHelper.GetClient("url");

    //var data = client.SendRequest(RestSharp.Method.GET, param);

    //1.2不带参数

    var client = RestSharpHelper.GetClient("http://localhost:5010/api/v1/SysColor/list");

    var response = client.SendRequest(Method.GET);

    if (response.StatusCode == HttpStatusCode.OK)

    {

        var result = JsonConvert.DeserializeObject<ColorResult>(response.Data.Data);

    }

    //2.Post调用方法

    var client2 = RestSharpHelper.GetClient("http://localhost:5010/api/v1/SysColor/list");

    var response2 = client2.SendRequest(Method.POST, JsonConvert.SerializeObject(new PostModel() { }));

    if (response2.StatusCode == HttpStatusCode.OK)

    {

        var result2 = JsonConvert.DeserializeObject<ColorResult>(response2.Data.Data);

    }

  • 相关阅读:
    poj 1080 dp
    Codeforces Round #280 (Div. 2)
    Codeforces Round #279 (Div. 2)f
    Codeforces Round #278 (Div. 1)
    Codeforces Round #276 (Div. 1)
    搜索
    debug 心得
    ZOJ 1633
    DRF 一对多序列化与反序列化
    HTTP协议
  • 原文地址:https://www.cnblogs.com/songjuntao/p/15549982.html
Copyright © 2011-2022 走看看