API规范约定,让你写出高质量的API!

导读:本篇文章讲解 API规范约定,让你写出高质量的API!,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

摘要

API的设计原则:

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

多说一句: 在现在流行的微服务、敏捷开发等这些项目一般为了更高效的开发,节约编写文档的成本,API服务都会使用Swagger来生成描述。


URL设计【针对后端开发】

HTTP规范

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

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

命名规范

  • 简洁
简洁 繁琐
captcha get-captcha-image
info getUserInfo
cars getAllCars
  • 可读
可读好 可读性差
delete delete-sysuser
add addDetIstr
update updateDetIstr
get appGetByNO

API臃肿

接口数量控制

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

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

一个类的接口不要超过6个,如下图所示:在这里插入图片描述

返回值规范

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

API接口注释规范

在这里插入图片描述


HTTP状态码

常用状态码
2xx:操作成功
4xx:客户端错误
5xx:服务器错误

完整状态码,传送门: HTTP系列:HTTP状态码

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

API返回格式规范

API 的请求格式
http://{域名}/v1/{模块}/{动作}
域名:https://localhost:5011 或者 http://localhost:5010 或者 https://api.stonecontact.com
模块: controller名称,比如user。
动作: 每个模块所实现的功能.。比如: add,delete 等.
  
前端组件具体格式以饿了么官网的组件为规范,
文档描述详见Swagger
服务器返回状态码以.NET Core的HttpStatusCode对象为主,不够的可以进行扩展 
API 返回格式
  • 响应一级目录包含三个字段如下所示:code,message,data
{
 "code": 200,
 "message": "", 
 "data":    
}
  • 服务器异常格式
{
 "code": 500,
 "message": "内部请求出错!",
 "data": 0
}
  • 验证返回错误格式
{
    "code": 400,
    "message": "Validation errors",
    "data": [
        "'Color Name' 不能为空。",
        "ColorName is mandatory.(Length:0-50)",
        "'Color Name_ CN' 不能为空。"
    ]
}
  • 列表格式
{
  "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
  }
}
  • 权限格式
{
 "code": 401,
}
  • 返回单个对象
{
    "code": 200,
    "message": "Operation success.",
    "data": {
        "colorID": 4,
        "colorName": "Brown",
        "pri": 0,
        "updateTimeTag": "2019-07-11T01:06:20.0629948Z",
        "colorName_CN": "棕色"
    }
}
  • 树Tree格式
{
  "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
        }
      ]
    }
  ]
}
  • 返回DropDownList格式
"code":200,
    "msg":"成功",
    "data":[
        {
            "text":"China",
            "value":"0"
        },
        {
            "text":"America",
            "value":"1"
        },
        {
            "text":"Canada",
            "value":"3"
        }
    ],
  • API 返回码
API 返回码 含义
200 请求成功
40000 验证错误
500 服务器端错误
400 资源找不到
  • 内部服务调用接口
//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);
}

最后

  • 更多参考精彩博文请看这里: 《陈永佳的博客》

  • 喜欢博主的小伙伴可以加个关注、点个赞哦,持续更新嘿嘿!

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/97517.html

(0)
小半的头像小半
0 0

相关推荐

  • C++把一个字符转换成string方法 技术随笔

    C++把一个字符转换成string方法

    0 0217
    飞熊的头像 飞熊
    2023年7月30日
  • SSRF漏洞 技术随笔

    SSRF漏洞

    0 0110
    小半的头像 小半
    2023年1月17日
  • 使用hexo在butterfly主题中开启看板娘配置教程(包括模型展示) 技术随笔

    使用hexo在butterfly主题中开启看板娘配置教程(包括模型展示)

    0 0198
    小半的头像 小半
    2023年1月24日
  • c++输出字符串结尾部分中文乱码问题 技术随笔

    c++输出字符串结尾部分中文乱码问题

    0 0349
    飞熊的头像 飞熊
    2023年8月9日
  • vue如何每次打开子组件弹窗都进行初始化 技术随笔

    vue如何每次打开子组件弹窗都进行初始化

    0 0180
    小半的头像 小半
    2023年2月11日
  • 【云原生之k8s】kubernetes核心组件 技术随笔

    【云原生之k8s】kubernetes核心组件

    0 0158
    小半的头像 小半
    2023年1月15日
  • Redis-Jedis 技术随笔

    Redis-Jedis

    0 0135
    小半的头像 小半
    2023年1月21日
  • mysql的SUBSTRING_INDEX 和GROUP_CONCAT 技术随笔

    mysql的SUBSTRING_INDEX 和GROUP_CONCAT

    0 0225
    小半的头像 小半
    2023年2月12日
  • Flask框架(十一)~Flask 项目搭建 技术随笔

    Flask框架(十一)~Flask 项目搭建

    0 0239
    小半的头像 小半
    2023年1月16日
  • ShardingSphere-JDBC读写分离 技术随笔

    ShardingSphere-JDBC读写分离

    0 0214
    小半的头像 小半
    2023年2月10日
  • leetcode 62. 不同路径 技术随笔

    leetcode 62. 不同路径

    0 0158
    小半的头像 小半
    2023年2月10日
  • 【C语言】实现打印100~200之间的素数(四种算法打印素数) 技术随笔

    【C语言】实现打印100~200之间的素数(四种算法打印素数)

    0 0200
    小半的头像 小半
    2023年1月20日

扫我!扫我!扫码!

API规范约定,让你写出高质量的API!

站长精选

  • SpringBoot 整合 Redis 全面教程:从配置到使用

    SpringBoot 整合 Redis 全面教程:从配置到使用

    2024年2月16日

  • 如何搭建漂亮的 SpringBoot 脚手架?

    如何搭建漂亮的 SpringBoot 脚手架?

    2024年8月18日

  • 别再乱写了,Controller 层代码这样写才足够规范!

    别再乱写了,Controller 层代码这样写才足够规范!

    2023年9月17日

  • SpringBoot + Redis 实现点赞功能的缓存和定时持久化(附源码)

    SpringBoot + Redis 实现点赞功能的缓存和定时持久化(附源码)

    2023年2月6日

  • SQL中为什么不要使用1=1?

    SQL中为什么不要使用1=1?

    2024年8月18日

  • 使用 PageHelper 插件分页查询很慢?一招帮你搞定!

    使用 PageHelper 插件分页查询很慢?一招帮你搞定!

    2023年4月1日

  • Redis 和 SpringBoot 的绝佳组合:Lua 脚本的黑科技!

    Redis 和 SpringBoot 的绝佳组合:Lua 脚本的黑科技!

    2023年10月15日

  • 【SpringBoot】 如何做到无感刷新token?

    【SpringBoot】 如何做到无感刷新token?

    2024年7月7日

  • SpringBoot + xxl-job 实现一个超牛的定时任务系统!

    SpringBoot + xxl-job 实现一个超牛的定时任务系统!

    2024年1月7日

  • 监控 SpringCloud 微服务的实践方案

    监控 SpringCloud 微服务的实践方案

    2023年10月20日

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!

深圳坪山网站建设公司五金网站优化培训网站排名优化推选火31星网站优化中的主次深圳海外网站优化最好的方法重庆网站推广优化网站优化的成功案例推广网站优化茂名品牌网站优化报价保定百度快照网站优化费用邯郸网站长尾关键词优化徐州网站搜索引擎优化宁海网站优化怎么做商城性质的网站怎么优化兰州网站整站优化案例网站优化怎么提升权重大连比较好的网站推广优化快速优化网站信息发布广州网站搜索引擎优化网站链接排名优化莲花手机网站优化热门网站优化系统加盟代理济宁网站seo推广优化机械网站优化优势哈尔滨优化网站多少钱湖口百度网站优化东城电子网站优化价格笋岗付费网站优化柏乡县网站优化公司通州做网站优化网站优化seo是什么香港通过《维护国家安全条例》两大学生合买彩票中奖一人不认账让美丽中国“从细节出发”19岁小伙救下5人后溺亡 多方发声卫健委通报少年有偿捐血浆16次猝死汪小菲曝离婚始末何赛飞追着代拍打雅江山火三名扑火人员牺牲系谣言男子被猫抓伤后确诊“猫抓病”周杰伦一审败诉网易中国拥有亿元资产的家庭达13.3万户315晚会后胖东来又人满为患了高校汽车撞人致3死16伤 司机系学生张家界的山上“长”满了韩国人?张立群任西安交通大学校长手机成瘾是影响睡眠质量重要因素网友洛杉矶偶遇贾玲“重生之我在北大当嫡校长”单亲妈妈陷入热恋 14岁儿子报警倪萍分享减重40斤方法杨倩无缘巴黎奥运考生莫言也上北大硕士复试名单了许家印被限制高消费奥巴马现身唐宁街 黑色着装引猜测专访95后高颜值猪保姆男孩8年未见母亲被告知被遗忘七年后宇文玥被薅头发捞上岸郑州一火锅店爆改成麻辣烫店西双版纳热带植物园回应蜉蝣大爆发沉迷短剧的人就像掉进了杀猪盘当地回应沈阳致3死车祸车主疑毒驾开除党籍5年后 原水城县长再被查凯特王妃现身!外出购物视频曝光初中生遭15人围殴自卫刺伤3人判无罪事业单位女子向同事水杯投不明物质男子被流浪猫绊倒 投喂者赔24万外国人感慨凌晨的中国很安全路边卖淀粉肠阿姨主动出示声明书胖东来员工每周单休无小长假王树国卸任西安交大校长 师生送别小米汽车超级工厂正式揭幕黑马情侣提车了妈妈回应孩子在校撞护栏坠楼校方回应护栏损坏小学生课间坠楼房客欠租失踪 房东直发愁专家建议不必谈骨泥色变老人退休金被冒领16年 金额超20万西藏招商引资投资者子女可当地高考特朗普无法缴纳4.54亿美元罚金浙江一高校内汽车冲撞行人 多人受伤

深圳坪山网站建设公司 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化