ServiceComb中的“卖身协议”

举报
艾弗森 发表于 2018/03/21 11:39:59 2018/03/21
【摘要】 ServiceComb通过契约(Swagger)规范微服务开发,实现跨语言的通信、不同编程模型随意组合调用并只需提供一套handler处理链。虽然现在ServiceComb提供了自动生成契约(Swagger)的方式,但是在较早的版本中不支持自动生成或者因为项目的原因必须在服务端添加契约,手写契约又容易出现一些错误导致服务调用出错。


Swagger是什么:

Swagger是一个用于描述和记录RESTful APIs的项目(参考文档:https://github.com/OAI/OpenAPI-Specification/blob/master/versions/2.0.md)。

Swagger的表现形式

根据Swagger规范描述的RESTful API的文件被表示为JSON对象并符合JSON标准。 作为JSON超集的YAML也可以用来表示Swagger规范文件,如:

  image.png


字段名称简介



Field NameTypeDescription
swaggerstring

指定使用的Swagger规格版本。 它可以被Swagger UI和其他客户端用来解释API列表。 该值必须是“2.0”

infoInfo Object提供关于API的元数据。 如果需要,客户端可以使用元数据。
hoststring主机名或者IP
basePathstringAPI的基本路径
schemes[string]API的传输协议
consumes[string]可以使用的MIME类型列表。 这对所有的API都是全局的,但可以在特定的API调用上被覆盖。 值必须如MIME类型下所述
produces[string]

与consumer类似


pathsPaths ObjectAPI的可用路径和方法
definitionsDefinitions Object一个对象,用于保存方法生成和使用的数据类型。
parametersParameters Definitions Object方法的参数
responsesResponses Definitions Object方法的返回类型
securityDefinitionsSecurity Definitions Object

安全方案定义


security[Security Requirement Object]宣布哪些安全计划适用于整个API。 值列表描述了可以使用的替代安全方案(即安全要求之间存在逻辑或)。 单独的操作可以覆盖此定义。
tags[Tag Object]规范使用附加元数据的标签列表。
externalDocsExternal Documentation Object

额外的 外部文件

注:标红字段必须填写



一些MIME类型的定义:

  text/plain; charset=utf-8
  application/json
  application/vnd.github+json
  application/vnd.github.v3+json
  application/vnd.github.v3.raw+json
  application/vnd.github.v3.text+json
  application/vnd.github.v3.html+json
  application/vnd.github.v3.full+json
  application/vnd.github.v3.diff
  application/vnd.github.v3.patch

Swagger中定义的参数类型

1.Path

2.Query

3.Header

4.Body

5.Form


If in is "body":


Field NameTypeDescription
schemaSchema ObjectRequired. The schema defining the type used for the body parameter.



这里要注意,如果参数类型为"body",则不能按下图所示书写

image.png

正确的写法是将类型写在Schema Object下,如:

image.png

在实际开发中很容易出现此错误



Swagger提供的一些注解

swagger-core提供了一系列的注解来达到生成生成契约文档(Swagger documentation)的目的,这些注解分为三大类:

  1. 声明资源

  2. 声明一个方法

  3. 声明API模型。


下面列举了一些swagger-core提供的注解及其作用

@ApiMarks a class as a Swagger resource.
@ApiImplicitParamRepresents a single parameter in an API Operation.
@ApiImplicitParamsA wrapper to allow a list of multiple ApiImplicitParam objects.
@ApiModelProvides additional information about Swagger models.
@ApiModelPropertyAdds and manipulates data of a model property.
@ApiOperationDescribes an operation or typically a HTTP method against a specific path.
@ApiParamAdds additional meta-data for operation parameters.
@ApiResponseDescribes a possible response of an operation.
@ApiResponsesA wrapper to allow a list of multiple ApiResponse objects.
@AuthorizationDeclares an authorization scheme to be used on a resource or an operation.
@AuthorizationScopeDescribes an OAuth2 authorization scope.
@ResponseHeaderRepresents a header that can be provided as part of the response.

在Swagger 2.0,class不再是一个resource,而是一个tag。@Api也被用来定义class中的所有方法,不再是用来声明resource。






【版权声明】本文为华为云社区用户翻译文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容, 举报邮箱:cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。