You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
GET /product:列出所有商品
POST /product:新建一个商品
GET /product/ID:获取某个指定商品的信息
PUT /product/ID:更新某个指定商品的信息
DELETE /product/ID:删除某个商品
GET /product/ID/purchase :列出某个指定商品的所有投资者
get /product/ID/purchase/ID:获取某个指定商品的指定投资者信息
前后端接口设计规范
建议采用RESTful 方式来实施。
协议
API与用户的通信协议,总是使用HTTPs协议,确保交互数据的传输安全。
域名
应该尽量将API部署在专用域名之下。
https://api.example.com
如果确定API很简单,不会有进一步扩展,可以考虑放在主域名下。
https://example.org/api/
api版本控制
应该将API的版本号放入URL。
https://api.example.com/v{n}/
另一种做法是,将版本号放在HTTP头信息中,但不如放入URL方便和直观。Github采用这种做法。
已经开放出的接口,不允许修改方法签名(外部接口的URL),避免对接口调用方产生影响。接口过时必须加@deprecated 注解,并清晰地说明采用的新接口或者新服务是什么。
API 路径规则
路径又称"终点"(endpoint),表示API的具体网址。
在RESTful架构中,每个网址代表一种资源(resource),所以网址中不能有动词,只能有名词,而且所用的名词往往与数据库的表格名对应。一般来说,数据库中的表都是同种记录的"集合"(collection),所以API中的名词也应该使用复数。
举例来说,有一个API提供动物园(zoo)的信息,还包括各种动物和雇员的信息,则它的路径应该设计成下面这样。
HTTP请求方式
对于资源的具体操作类型,由HTTP动词表示。
常用的HTTP动词有下面四个(括号里是对应的SQL命令)。
GET(SELECT):从服务器取出资源(一项或多项)。
POST(CREATE):在服务器新建一个资源。
PUT(UPDATE):在服务器更新资源(客户端提供改变后的完整资源)。
DELETE(DELETE):从服务器删除资源。
下面是一些例子。
过滤信息
如果记录数量很多,服务器不可能都将它们返回给用户。API应该提供参数,过滤返回结果。
API 传入参数
参入参数分为4种类型:
cookie和header 一般都是用于OAuth认证的2种途径
返回数据
只要api接口成功接到请求,就不能返回200以外的HTTP状态。
为了保障前后端的数据交互的顺畅,建议规范数据的返回,并采用固定的数据格式封装。
接口返回模板:
status: 接口的执行的状态
Data 接口的主数据
Msg
接口安全
开放接口供外部使用,需要关注接口运行的安全性,比如可以通过使用漏桶和令牌桶等算法来进行接口的限流、通过非对称加密等方式来保护接口数据的安全性、通过使用时间戳加整个url签名的方式来防止重放攻击和进行限流保护。
对外提供的开放接口,需要进行参数有效性校验。不合法入参的接口请求在校验阶段就应该返回了,不至于继续操作后台数据库或其他数据存储。
对外提供的开放接口,需要提供入参保护,包括检查入参有效值的范围、检查入参落在白名单列表范围、批量查询操作的数据量范围等。
api接口文档
后端接口开发中,使用类似于Swagger 、Api2Doc等接口管理工具,定义接口内容包含:接口名称(name),接口地址(url),输入参数(params),返回值(data),错误码(errorCode),错误信息(errorMessage)。
非Restful Api的需求
页面级的api
把当前页面中需要用到的所有数据通过一个接口一次性返回全部数据
举例: api/v1/get-home-data 返回首页用到的所有数据
自定义组合api
跨域
前后端分离后,接口所在域名和前端展示逻辑代码不在一个域名,但由于浏览器同源策略限制,前端AJAX请求无法获取数据,因此需要来解决跨域问题。
常见的跨越方案有JSONP,CORS, nginx或node代理跨域;jsonp的安全性会降低,nginx或node代理会增加api服务,CORS相对最容易,也比较安全;服务端设置Access-Control-Allow-Origin:*;如果接口需要读取cookie的话,那么前端也需要做一些简单的配置。
java示例:
#129
#126
The text was updated successfully, but these errors were encountered: