微服务接口定义规范标准.docx

上传人:b****4 文档编号:1420410 上传时间:2022-10-22 格式:DOCX 页数:7 大小:17.84KB
下载 相关 举报
微服务接口定义规范标准.docx_第1页
第1页 / 共7页
微服务接口定义规范标准.docx_第2页
第2页 / 共7页
微服务接口定义规范标准.docx_第3页
第3页 / 共7页
微服务接口定义规范标准.docx_第4页
第4页 / 共7页
微服务接口定义规范标准.docx_第5页
第5页 / 共7页
点击查看更多>>
下载资源
资源描述

微服务接口定义规范标准.docx

《微服务接口定义规范标准.docx》由会员分享,可在线阅读,更多相关《微服务接口定义规范标准.docx(7页珍藏版)》请在冰豆网上搜索。

微服务接口定义规范标准.docx

微服务接口定义规范标准

接口定义规范

研发部

2018/01

微服务接口设计采用Restful风格的接口规范,下面是基于Restful风格要求制订的接口设计规范。

1.URI命名规范

Ø不用大写;

Ø用中杠-不用下杠_;

Ø参数列表要encode;

Ø使用名词作为资源名称<例如,不要在网址中使用动词>;

Ø使用资源集合的概念;

v每种资源有两类URI〔接口:

◆资源集合〔例如,/orders;

◆集合中的单个资源〔例如,/orders/{orderId}。

v使用复数形式<使用‘orders’而不是‘order’>;

v资源名称和ID组合可以作为一个网址的节点;

例如,/orders/{orderId}/items/{itemId};

v尽可能的让网址越短越好,单个网址最好不超过三个节点。

可以使用查询参数代替路径中的节点组合

Ø对Composite资源的访问

服务器端的组合实体必须在uri中通过父实体的id导航访问。

GET/orders/12/items

Ø使用有意义的资源描述;

v"禁止单纯的使用ID!

"响应信息中不应该存在单纯的ID,应使用链接或是引用的对象;

v设计资源的表述信息,而不是简简单单的做数据库表的映射;

v合并表述信息,不要通过两个ID直接表示两个表的关系;

Ø资源的集合应支持过滤,排序和分页;

过滤、排序、分页应出现在参数列表中而不是Path中。

例如:

GET/currencies?

page=1&size=10

过滤条件应该合并到一个参数里:

GET:

//example/users?

filter="name:

:

todd|city:

:

denver|title:

:

grandpoobah"

排序字段也应该合并到一个参数里,使用-代表倒序

GET:

//example/users?

sort=last_name|first_name|-hire_date

Ø经常使用的、复杂的查询标签化,降低维护成本。

如:

GET/trades?

status=closed&sort=createddesc

快捷方式:

GET/trades/recently-closed

2.使用方法表示动作行为

vPOST-创建资源,非幂等性操作;

vPUT-更新资源;

vPATCH-部分更新资源;

vGET-获取单个资源或资源集合;

vDELETE-删除单个资源或资源集合;

原则上URI中不应该出现动词,当出现复杂操作超出上述方法描述的行为时,可以考虑通过URL参数来指定动作。

如PUT/books/1?

action=like标注ID为1的图书为喜爱图书

使用其他动作时,方法仍然根据实际操作属于那种类型设定,比如属于资源的更新操作,那么就使用PUT方法。

3.使用内容协商处理资源表示内容

通过请求头/响应头中的Content-Type判断请求提中的数据类型,然后根据数

据类型做出相应处理。

v请求Body内容格式采用JSON格式,其格式通过HeaderContent-Type:

application/json表示。

v或From表单格式,其格式通过Header:

Content-Type:

application/x-www-form-urlencoded

v响应内容格式为JSON,响应头Content-Type:

application/json

v或HAL+JSON,响应头为Content-Type:

application/hal+json

v或XML格式,响应头为Content-Type:

text/xml

4.使用响应状态码标识处理结果状态

v不要发生了错误但给2xx响应,客户端可能会缓存成功的请求;

v正确设置状态码,不要自定义;

下面是常用状态码及其意义:

响应码

说明

200OK

请求处理正常,通常用于GET操作时内容正常返回

201Created

Post或PUT操作时对象被正常创建,通常在Body中返回对象内容。

204Nocontent

处理成功,但没返回值。

如delete操作,没有内容可返回。

301Movedpermanently

资源被移动到其它位置,需要客户端重定向。

400Badrequest

请求有问题,可能是缺少参数或参数不正确,需要客户端修正请求内容。

可以在请求体中返回错误提示信息。

401Unauthorized

指定资源需要授权,用户未认证身份所以不能访问资源。

403Forbidden

用户已登录但是没有指定资源的访问权限。

404Notfound

指定的资源不存在。

405Methodnotallowed

资源不支持访问方法,如对只读资源使用PUT进行更新

409 Conflict

将出现重复的数据或是无效的数据状态。

500Internalservererror

服务器发生非预期错误,此时需要在响应体中返回错误的具体信息。

对于400、409、500这种需要进一步说明原因的错误码,可以在响应体中返回对应的错误信息,格式如下:

{

code:

’500’,

message:

'服务暂不可用,请稍后重试或与管理员联系'

}

5.使用 HAL作为响应数据格式

v简单资源对象:

{"_links":

{"self":

{"href":

":

//example.org/api/user/matthew"}},"id":

"matthew","name":

"MatthewWeierO'Phinney"}

v复杂资源对象:

{"_links":

{"self":

{"href":

":

//example.org/api/user/matthew"}},"id":

"matthew","name":

"MatthewWeierO'Phinney","_embedded":

{"contacts":

[{"_links":

{"self":

{"href":

":

//example.org/api/user/mac_nibblet"}},"id":

"mac_nibblet","name":

"AntoineHedgecock"},{"_links":

{"self":

{"href":

":

//example.org/api/user/spiffyjr"}},"id":

"spiffyjr","name":

"KyleSpraggs"}],"website":

{"_links":

{"self":

{"href":

":

//example.org/api/locations/mwop"}},"id":

"mwop","url":

":

//"},}}

v带有分页的结果:

{

"_embedded":

{

"currencyLogs":

[{

"type":

1,

"coin":

0.50,

"usercoin":

5.50,

"add_time":

"1504228164",

"expressid":

0

},{

"type":

1,

"coin":

0.50,

"usercoin":

6.00,

"add_time":

"1504228187",

"expressid":

0

},

....................

{

"type":

1,

"coin":

0.50,

"usercoin":

10.00,

"add_time":

"1504228349",

"expressid":

0

}]

},

"_links":

{

"first":

{

},

"prev":

{

},

"self":

{

},

"next":

{

"href":

"

},

"last":

{

}

},

"page":

{

"size":

10,

"totalElements":

53454,

"totalPages":

5346,

"number":

1

}

}

6.各方法成功处理后的返回数据

方法

response格式

GET

单个对象、集合

POST

新增成功的对象、或URI

PUT/PATCH

更新成功的对象或URI

DELETE

7.不要对返回结果进行封装

response的body直接就是数据,不要做多余的包装。

{

"type":

1,

"coin":

24991.50,

"expressid":

0,

"_links":

{

"self":

{

"href":

":

//localhost:

8011/currencies/270"

}

}

}

8.支持资源的字段裁剪,减少响应中返回的字段数量

9.使用OAuth2来确保API的安全性

v使用BearerToken进行身份验证;

vOAuth2的Bearertoken要求必须通过S/TLS/SSL来访问你的API。

通过进行的未加密通信将导致窃听和重放。

10.确保GET,PUT,DELETE请求是幂等的

幂等性:

执行1次和执行N次,对资源状态改变的效果是等价的。

11.API版本

使用HEADER传递版本信息。

#Request

Accept:

application/json

Content-Type:

application/json;version=1

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 小学教育 > 语文

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1