一、协议

API与客户端用户的通信协议,总是使用HTTPS协议,以确保交互数据的传输安全。

二、域名

应该尽量将API部署在专用域名之下: https://api.example.com 如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下: https://www.example.com/api

三、版本控制

https://api.example.com/v{n}

1、应该将API的版本号放入URL。

2、采用多版本并存,增量发布的方式。

3、n代表版本号,分为整型和浮点型 整型: 大功能版本, 如v1、v2、v3 ... 浮点型: 补充功能版本, 如v1.1、v1.2、v2.1、v2.2 ...

4、对于一个 API 或服务,应在生产中最多保留 3 个最详细的版本

四、路径规则

路径又称"终点"(end point),表示API的具体网址。

1、在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词。 【所用的名词往往与数据库的表格名对应】

2、数据库中的表一般都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。 例子: https://api.example.com/v1/products https://api.example.com/v1/users https://api.example.com/v1/employees

五、请求方式

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

POST(CREATE): 在服务器新建一个资源。

PUT(UPDATE): 在服务器更新资源(客户端提供改变后的完整资源)。

DELETE(DELETE): 从服务器删除资源。

例子: GET /v1/products 获取所有商品 GET /v1/products/ID 获取某个指定商品的信息 POST /v1/products 新建一个商品 PUT /v1/products/ID 更新某个指定商品的信息 DELETE /v1/products/ID 删除某个商品,更合理的设计详见【9、非RESTful API的需求】 GET /v1/products/ID/purchases 列出某个指定商品的所有投资者 GET /v1/products/ID/purchases/ID 获取某个指定商品的指定投资者信息

六、过滤信息

若记录数量很多,服务器不可能返回全部记录给用户。 API应该提供分页参数及其它筛选参数,过滤返回结果。 /v1/products?page=1&pageSize=20 指定第几页,以及每页的记录数。 /v1/products?sortBy=name&order=asc 指定返回结果按照哪个属性排序,以及排序顺序。

七、传入参数

传入参数分为4种类型:

1、cookie: 一般用于OAuth认证

2、request header: 一般用于OAuth认证

3、请求body数据:

4、地址栏参数: 1)restful 地址栏参数 /v1/products/ID ID为产品编号,获取产品编号为ID的信息 2)get方式的查询字段 见【六、过滤信息】

八、响应参数

response: ---------------------------------------- { status: 200, // 详见【status】 data: { code: 1, // 详见【code】 data: {} || [], // 数据 message: '成功', // 存放响应信息提示,显示给客户端用户【须语义化中文提示】 sysMessage: 'success' // 存放响应信息提示,调试使用,中英文都行 ... // 其它参数,如 total【总记录数】等 }, msg: '成功', // 存放响应信息提示,显示给客户端用户【须语义化中文提示】 sysMsg: 'success' // 存放响应信息提示,调试使用,中英文都行 } ---------------------------------------- 【status】: 200: OK 400: Bad Request 500:Internal Server Error 401:Unauthorized 403:Forbidden 404:Not Found 【code】: 1: 获取数据成功 | 操作成功 0:获取数据失败 | 操作失败

九、非RESTful API的需求

1、实际业务开展过程中,可能会出现各种的api不是简单的restful 规范能实现的。 2、需要有一些api突破restful规范原则。 3、特别是移动互联网的api设计,更需要有一些特定的api来优化数据请求的交互。 1)、删除单个 | 批量删除 : DELETE /v1/product body参数{ids:[]} 2)、页面级API : 把当前页面中需要用到的所有数据通过一个接口一次性返回全部数据

十、一致性原则

1、前端需要哪些字段,API接口应该返回哪些字段,字段不多也不少。 2、更新功能尽量做到:初次返回的原始数据参数与提交更新的数据参数结构一致。 3、时间参数,尽量以一致格式的字符串传递, 如: ‘2019-01’ | ‘2019/01’ ‘2019-01-01’ | ‘2019/01/01’ ‘2019-01-01 12:12:12’ | ‘2019/01/01 12:12:12’ 4、其它参数【待更新】

十一、接口文档

1、尽量采用自动化接口文档,可以做到在线测试,同步更新。 2、应包含:接口BASE地址、接口版本、接口模块分类等。 3、每个接口应包含: 接口地址:不包含接口BASE地址。 请求方式: get、post、put、delete等。 请求参数:数据格式【默认JSON、可选form data】、数据类型、是否必填、中文描述。 响应参数:类型、中文描述。

十二、参考资料

1、https://my.oschina.net/qqlet/blog/1922038
2、https://juejin.im/post/5afee0e86fb9a07ab379b371

如何写resultful接口的更多相关文章

  1. web api写api接口时返回

    web api写api接口时默认返回的是把你的对象序列化后以XML形式返回,那么怎样才能让其返回为json呢,下面就介绍两种方法: 方法一:(改配置法) 找到Global.asax文件,在Applic ...

  2. 【Node.js】二、基于Express框架 + 连接MongoDB + 写后端接口

    在上节,我们讲了如何搭建express环境,现在我们说说如何通过node.js写服务接口给前端调用 1. 首先通过MongoDB建好数据库与表格 例如,我的数据库名字为db_demo,数据库表格为go ...

  3. 当使用cokie进行数据交互时候,cookie只需存储该对象的id即可不需要存放其他数据;只需在写个接口根据cookie里面的对象id来创建对象

    当使用cokie进行数据交互时候,cookie只需存储该对象的id即可不需要存放其他数据:只需在写个接口根据cookie里面的对象id来创建对象

  4. 使用PHP写ajax接口

    使用PHP写ajax接口 之前有学过php都是前后端没有分离的,所以也想去了解后端是怎么写出ajax接口的,可能问了别人或者上网找了很多资料都很有有点懵,或者说直接用TP或者lavarel这些后端框架 ...

  5. Thrift写RPC接口

    Thrift总结(二)创建RPC服务 前面介绍了thrift 基础的东西,怎么写thrift 语法规范编写脚本,如何生成相关的语言的接口.不清楚的可以看这个<Thrift总结(一)介绍>. ...

  6. Swagger解决你手写API接口文档的痛

    首先,老规矩,我们在接触新事物的时候, 要对之前学习和了解过的东西做一个总结. 01 痛     苦 不做.不行 之前,前后端分离的系统由前端和后端不同的编写,我们苦逼的后端工程师会把自己已经写完的A ...

  7. ASP.NET Aries 高级开发教程:如何写WebAPI接口

    前提: 最近,有不少同学又问到,Aries里如何提供WebAPI接口? 针对这个问题,今天给顺路写个教程,其实呢,很简单的. 方式一:直接用WebService提供接口. 用这种方式,直接添加接口就可 ...

  8. java写webservice接口

    有一个需求:要求根据设备mac和终端设备类型来查询设备库存状态. 接口协议是采用webservice协议,信息交互方式为xml格式信息 输入参数存放到XML各个节点下,并转为一个String,作为接口 ...

  9. SpringBoot写后端接口,看这一篇就够了!

    摘要:本文演示如何构建起一个优秀的后端接口体系,体系构建好了自然就有了规范,同时再构建新的后端接口也会十分轻松. 一个后端接口大致分为四个部分组成:接口地址(url).接口请求方式(get.post等 ...

随机推荐

  1. 认识Caffe与Caffe2

    认识Caffe与Caffe2 目录: 一.Caffe的作者-贾扬清 二.Caffe简介--Caffe.Caffe2.Caffe2Go 三.认识Caffe 四.认识Caffe2 五.认识Caffe2Go ...

  2. MYSQL安全模式SQL语法需要注意的地方

    MYSQL安全模式 Mysql版本: 背景: 为了避免在执行delete.update将全表数据清空或者覆盖修改,在新项目营销云中开启了mysql的安全模式. 安全模式要求不能对非主键的条件查询做up ...

  3. Ubuntu安装截图软件shutter

    参考链接: Ubuntu 安装和配置shutter截图软件 解决shutter不能编辑的问题:https://itsfoss.com/shutter-edit-button-disabled/ 安装前 ...

  4. html z-index

    如果你的悬浮的div被其他遮挡  那应该是遮挡的元素与它不是同级  可以考虑放在同一个父级目录下

  5. 4-windows启用账户锁定计数器

    1.打开本地策略编辑器 命令:gpedit.msc 2.找到账户锁定策略 3.右键属性,设置登录无效次数 注:这个策略修改完后,不需要重新服务器就能生效

  6. Huffman树、霍夫曼编码

    Huffman树指的是带权路径长度WPL最小的二叉树 WPL=路径*权值 Huffman常用于压缩编码,正常传输ABCDEF这些字母需要3位二进制树来描述,但由于一篇文章中ABCDEF这些字母出现的概 ...

  7. 顺序表元素位置倒置示例c++实现

    #include <iostream> #define MAXSIZE 100 using namespace std; void reverse(int a[],int n)//对数组元 ...

  8. hdu 5869 Different GCD Subarray Query BIT+GCD 2016ICPC 大连网络赛

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  9. linux下如何编辑txt文档

    利用vi命令 [root@bogon a]# vi a.txt   打开a.txt文档 vi a.txt后,键盘敲i,可以进入编辑模式, 输入完内容后按ESC键,键盘输入  :wq   可以保存并退出 ...

  10. Hdu 5248

    hdu5248-序列变换 题意: 给你一个序列A,要求改变序列A中的某些元素的顺序,形成一个新的数列B,并保证数列B严格单调递增,求出最小代价. 代价计算公式 $ cost(a,b)=max(|A_i ...