协议

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

域名

应该尽量将API部署在专用域名之下。
 https://api.example.com

如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
 https://example.org/api/

api版本控制

应该将API的版本号放入URL。
  https://api.example.com/v{n}/
 另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。

采用多版本并存,增量发布的方式
v{n} n代表版本号,分为整形和浮点型
整形的版本号: 大功能版本发布形式;具有当前版本状态下的所有API接口 ,例如:v1,v2
浮点型:为小版本号,只具备补充api的功能,其他api都默认调用对应大版本号的api 例如:v1.1 v2.2

API 路径规则

路径又称"终点"(endpoint),表示API的具体网址。
  在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。
举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。

https://api.example.com/v1/products
https://api.example.com/v1/users
https://api.example.com/v1/employees

HTTP请求方式

对于资源的具体操作类型,由HTTP动词表示。
    常用的HTTP动词有下面四个(括号里是对应的SQL命令)。
      GET(SELECT):从服务器取出资源(一项或多项)。
      POST(CREATE):在服务器新建一个资源。
      PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
      DELETE(DELETE):从服务器删除资源。

下面是一些例子。

GET /product:列出所有商品
POST /product:新建一个商品
GET /product/ID:获取某个指定商品的信息
PUT /product/ID:更新某个指定商品的信息
DELETE /product/ID:删除某个商品
GET /product/ID/purchase :列出某个指定商品的所有投资者
get /product/ID/purchase/ID:获取某个指定商品的指定投资者信息

过滤信息

如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。

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

API 传入参数

参入参数分为4种类型:

地址栏参数
* restful 地址栏参数 /api/v1/product/122 122为产品编号,获取产品为122的信息
* get方式的查询字串 见过滤信息小节
请求body数据
cookie
request header

cookie和header 一般都是用于OAuth认证的2种途径

返回数据

只要api接口成功接到请求,就不能返回200以外的HTTP状态。
  为了保障前后端的数据交互的顺畅,建议规范数据的返回,并采用固定的数据格式封装。

接口返回模板:

{
status:0,
data:{}||[],
msg:’’
}

status: 接口的执行的状态

=0表示成功
<0 表示有异常
》0 表示接口有部分执行失败

Data 接口的主数据

,可以根据实际返回数组或JSON对象

Msg

当status!=0 都应该有错误信息

非Restful Api的需求

由于实际业务开展过程中,可能会出现各种的api不是简单的restful 规范能实现的,因此,需要有一些api突破restful规范原则。特别是移动互联网的api设计,更需要有一些特定的api来优化数据请求的交互。

页面级的api

把当前页面中需要用到的所有数据通过一个接口一次性返回全部数据

举例

api/v1/get-home-data 返回首页用到的所有数据

这类API有一个非常不好的地址,只要业务需求变动,这个api就需要跟着变更。

自定义组合api

把当前用户需要在第一时间内容加载的多个接口合并成一个请求发送到服务端,服务端根据请求内容,一次性把所有数据合并返回,相比于页面级api,具备更高的灵活性,同时又能很容易的实现页面级的api功能。

规范

地址:api/v1/batApi

/profile/{version}/{appid}
/profile/{version}/{uid}/{appid}&tag={tag}
/profile/{version}/{uid}
/modules/{versionid}/items/{id}
settings?userName=XXX
1、接口中不能出现驼蜂,不能出现get/query等字眼;
2、接口中全部采用小写的方式来完成,入参中允许驼峰
3、路径采用英语名称复数来定义
 
高级别的模式是:
http(s)://server.com/app-name/{version}/{domain}/{rest-convention}
这里,{version}代表api的版本信息。{domain}是一个你可以用来定义任何技术的区域(例如:安全-允许指定的用户可以访问这个区域。)或者业务上的原因。(例如:同样的功能在同一个前缀之下。)
 {rest-convention} 代表这个域(domain)下,约定的rest接口集合。
 
单资源( singular-resourceX )
   url样例:order/  (order即指那个单独的资源X)
  • GET – 返回一个新的order
  • POST- 创建一个新的order,从post请求携带的内容获取值。
 单资源带id(singular-resourceX/{id} )
   URL样例:order/1 ( order即指那个单独的资源X )
  • GET – 返回id是1的order
  • DELETE – 删除id是1的order
  • PUT – 更新id是1的order,order的值从请求的内容体中获取。
 复数资源(plural-resourceX/)
    URL样例:orders/
  • GET – 返回所有orders
复数资源查找(plural-resourceX/search)
   URL样例:orders/search?name=123
  • GET – 返回所有满足查询条件的order资源。(实例查询,无关联) – order名字等于123的。
复数资源查找(plural-resourceX/searchByXXX)
   URL样例:orders/searchByItems?name=ipad
  • GET – 将返回所有满足自定义查询的orders – 获取所有与items名字是ipad相关联的orders。
单数资源(singular-resourceX/{id}/pluralY)
   URL样例:order/1/items/ (这里order即为资源X,items是复数资源Y)
  • GET – 将返回所有与order id 是1关联的items。
 singular-resourceX/{id}/singular-resourceY/
   URL样例:order/1/item/
  • GET – 返回一个瞬时的新的与order id是1关联的item实例。
  • POST – 创建一个与order id 是1关联的item实例。Item的值从post请求体中获取。
 
singular-resourceX/{id}/singular-resourceY/{id}/singular-resourceZ/
  URL样例:order/1/item/2/package/
  • GET – 返回一个瞬时的新的与item2和order1关联的package实例。
  • POST – 创建一个新的与item 2和order1关联的package实例,package的值从post请求体中获得。
 
上面的规则可以在继续递归下去,并且复数资源后面永远不会再跟随负数资源。
   总结几个关键点,来更清晰的表述规则。
  • 在使用复数资源的时候,返回的是最后一个复数资源使用的实例。
  • 在使用单个资源的时候,返回的是最后一个但是资源使用的实例。
  • 查询的时候,返回的是最后一个复数实体使用的实例(们)。

示例:http://www.tuicool.com/articles/bUZNZbZhttp://blog.csdn.net/u010622769/article/details/54341363

API接口规范的更多相关文章

  1. CHENGDU3-Restful API 接口规范、django-rest-framework框架

    Restful API 接口规范.django-rest-framework框架 问题:什么是API? 答:API是接口,提供url. 接口有两个用途: 为别人提供服务,前后端分离. 为什么使用前后端 ...

  2. Web API接口规范与测试方法

    目录 1.Web API接口 1.1接口的四大特点 1.2接口文档的编写:YApi 1.3接口测试工具:Postman 2.接口规范(restful) 2.1URL设计 2.1.1 数据的安全保障(h ...

  3. API 接口规范

    整体规范建议采用RESTful 方式来实施. 1. 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 2. 域名 应该尽量将API部署在专用域名之下. https://a ...

  4. API接口规范V1.0——制定好规范,才好合作开发

    返回码规范: 统一六位 000000 表示成功! 参数相关返回码预留100000-199999:系统相关返回码预留200000-299999:数据中心310000-319999后续项目以此类推,后续根 ...

  5. Restful API接口规范

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

  6. PHP:API 接口规范完整版本

    整体规范建议采用RESTful 方式来实施. 协议 API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全. 域名 应该尽量将API部署在专用域名之下.https://api.exam ...

  7. RESTful restful api Representational State Transfer

    通俗直白讲:REST是一种编写风格,一种API接口规范.它的风格就是将对象(如学生)的状态(如增删改查,API接口版本号等等)通过其他方式传递,API的接口地址突显出描述的对象. -- == REST ...

  8. 在Java API设计中,面向接口编程的思想,以及接口和工厂的关系

    现在的java API的设计中,提倡面向接口的编程,即在API的设计中,参数的传递和返回建议使用接口,而不是具体的实现类,如一个方法的输入参数类型应该使用Map接口,而不是HashMap或Hashta ...

  9. 高质量API网关组件实现

    PI网关组件的作用? 1.网关直接代替MVC当中的Controller层,减少编码量提高开发效率 2.统一API接口的出入参格式,提高API的友好性 3.自动检测API接口规范,提高接口的质量 4.统 ...

随机推荐

  1. 使用phpqrcode生成二维码

    使用PHP语言生成二维码,还是挺有难度的,当然调用生成二维码图片的接口(比如:联图网http://www.liantu.com/的接口)除外,如果自己写代码生成,真的无从下手.然而,我们可以使用php ...

  2. (算法)从0到n整数中数字2出现的次数

    题目: 数出0到n(含)中数字2出现了几次. 思路: 1.暴力方法,数出每个数字包含几个2,然后累加起来. 2.分析:分别考虑数字n每一位出现2的次数,如123123: 从左往右考虑4123123: ...

  3. 关于ngModelOptions用法总结 让校验不过的验证绑定ngModel

    updataOn 指定ng-model以什么绑定事件触发 default 就是默认的大家都知道blur 失去焦点的时候更新mouseover 鼠标滑过....... <input type=&q ...

  4. C#.NET常见问题(FAQ)-如何在不同窗体之间传递值

    最简单的方法是在定义窗体的时候就写好几个变量,在实例化Form2的时候,就把这些参数传递过去   或者你也可以定义一个类,然后通过这个类的静态变量交互(注意只能用静态的,因为Form2无法访问Form ...

  5. Unlicensed ARC session – terminating!

    问题描述 近日,发现ArcGIS10.4中存在很多bug,而且费了好多时间去测试它,最终决定改用10.1.在降级程序时遇到许可问题. 重装ArcGIS10.1后,打开工程,所有引用都自动映射,没报任何 ...

  6. Jquery 中的CheckBox、 RadioButton、 DropDownList的取值赋值

    1.获取选中值,三种方法都可以: $('input:radio:checked').val(): $("input[type='radio']:checked").val(); $ ...

  7. 机器学习中,使用NMS对框取优

    一.NMS实现代码 # http://www.pyimagesearch.com/2015/02/16/faster-non-maximum-suppression-python/ import nu ...

  8. python 3使用binascii方法的报错解决

    环境是python 3 问题: 使用binascii方法一直出现报错TypeError: a bytes-like object is required, not 'str' #coding: utf ...

  9. H5 新增内容 新增属性

    1.视频 video 2.音频 audio 3.拖放 Drag 和 drop 4.画布 canvas 5.SVG 6.地理定位 navigator.geolocation.getCurrentPosi ...

  10. hdu 4336 概率dp + 状压

    hdu 4336 小吃包装袋里面有随机赠送一些有趣的卡片,如今你想收集齐 N 张卡片.每张卡片在食品包装袋里出现的概率是p[i] ( Σp[i] <= 1 ), 问你收集全部卡片所需购买的食品数 ...