协议

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. java 让图片变黑白

    import java.awt.Image;import java.awt.color.ColorSpace;import java.awt.image.BufferedImage;import ja ...

  2. [Algorithm] How many meeting rooms needed?

    Give you set of meetings start time and end time, count how many meeting rooms needed. For example: ...

  3. 转-为什么Lisp语言如此先进?(译文)

    之前在看黑客与画家的时候看过,今天重温,完全不一样的感觉! 原文地址:http://www.ruanyifeng.com/blog/2010/10/why_lisp_is_superior.html ...

  4. 树莓派系统(Debain)中设置SSH服务开机自启动

    一.方式: 禁用命令:sudo update-rc.d ssh disable 启用命令:sudo update-rc.d ssh enable 二.chkconfig的方式: 1.安装:apt-ge ...

  5. 如何导入外部Git仓库到中国源代码托管平台(Git@OSC)

    git clone --bare http://git.rcrtm.com/git/dianli.git git clone --mirror https://git.oschina.net/cand ...

  6. 有关/proc/uptime这个文件里两个参数所代表的意义

    有关/proc/uptime这个文件里两个参数所代表的意义: [root@app ~]#cat /proc/uptime 3387048.81 3310821.00 第一个参数是代表从系统启动到现在的 ...

  7. Android学习笔记一:项目目录结构

    一:Android目录 主要内容有: app目录下: manifests目录: AndroidManifest.xml:APP的配置 java目录:主要为源代码和测试代码 res目录:主要是资源文件, ...

  8. java 遍历Map的四种方式

      java 遍历Map的四种方式 CreationTime--2018年7月16日16点15分 Author:Marydon 一.迭代key&value 第一种方式:迭代entrySet 1 ...

  9. java Map常用方法封装

      java Map常用方法封装 CreationTime--2018年7月16日15点59分 Author:Marydon 1.准备工作 import java.util.HashMap; impo ...

  10. 〖Android〗简单隐藏Android虚拟键盘的方法

    在Android使用 input 输入文本时,不期望出现虚拟键盘: 一般情况下,大家会把键盘给卸载,不过也有简单的方法: 就是下载一个 com.wparam.nullkeyboard (NullKey ...