首页 > 其他分享 >Swagger规范RESTful AP

Swagger规范RESTful AP

时间:2023-08-03 17:07:54浏览次数:27  
标签:定义 REST AP API 文档 接口 Swagger RESTful


      

REST的引入


  随着微服务架构的广泛流行,REST风格受到越来越多的关注。 我们先来看一下REST在WIKI的定义及五大关键点:


  REST在WIKI的定义


  REST stands for Representational State Transfer. It relies on a stateless, client-server, cacheable communications protocol – and in virtually all cases, the HTTP protocol is used


  REST 风格有五大关键点


  资源(Resource)


  资源的表述(Representation)


  状态转移(State Transfer)


  统一接口(Uniform Interface)


  超文本驱动(Hypertext Driven)


  什么是统一接口?


  REST要求, 必须通过统一的接口来对资源执行各种操作。对于每个资源只能执行一组有限的操作 。以HTTP/1.1协议为例,此协议定义了一个操作资源的统一接口,主要包括以下内容:


  **7个HTTP方法:GET/POST/PUT/DELETE/PATCH/HEAD/OPTIONS


  HTTP头信息(HTTP Header可以自定义)


  HTTP响应状态代码(status code可以自定义)


  一套标准的内容协商机制


  一套标准的缓存机制


  一套标准的客户端身份认证机制

<ignore_js_op style="word-wrap: break-word;">


  我们遇到的问题…


  在开发我们的新一代数字化企业云平台的第一个版本时,前端基于reactJS框架,和后端完全解耦,所有的交互都是通过REST Service完成,同时后端各个领域系统间也是通过REST Service来通信。REST本身虽然有统一的规范,然而对于REST API的管理却没有统一规范,再加上前期时间紧迫,没有足够的资源去做详细的文档说明。API定义的沟通就只能依赖UI和后台开发人员的口头沟通。这里面就存在很多 不确定因素 :

<ignore_js_op style="word-wrap: break-word;">


  Swagger的引入


  如何更优雅且全面地描述我们的RESTful API呢?对API文档管理的规范有很多,比如Swagger,I/O docs,blueprint 等。但是Swagger社区活跃,文档更完善,周围相关的配套产品也更丰富,比如Swager UI,Swagger Editor,并且支持直接生成主流语言的调用代码。


  因此,引入Swagger进行Rest API文档管理对项目来说,效率和产出会更高。数字化企业云平台团队经过调研后决定采用Swagger来进行REST API的管理。(注:Microsoft,PayPal等公司也已经引入Swagger 来定义自己的REST API 文档。)


  Swagger已经被捐赠给 Open APIInitiative (OAI),属于OAI的成员之一,我们可以简单看下OAI的定义规范:The goal of the OAIspecification is to define a standard, language-agnostic interface to REST APIswhich allows both humans and computers to discover and understand thecapabilities of the service without access to source code, documentation, orthrough network traffic inspection.


  由此可知, Swagger是为了描述一套标准的而且是和语言无关的REST API的规范。对于外部调用者来说,只需通过Swagger文档即可清楚Server端提供的服务,而不需去阅读源码或接口文档说明。 官网上有关于Swagger的丰富的资源,包括Swagger Editor,Swagger UI,以及Swagger为各种开发语言提供的SDK。这些资源为REST API 的提供者以及调用者提供了极大的便利。


  在确定了引入Swagger后, 如何自动根据代码接口的定义来生成Swagger呢? 在数字化企业云平台项目中同时引入了Swagger-Maven-plugin,通过在已有的API接口中添加少量的annotation, 同时配置Pom.xml文件,即可在Maven compile期间自动生成对应的Swagger文件,这大大减少了我们手工维护Swagger文档的工作量,提高工作效率,同时也避免手工维护引起的失误。以数字化企业云平台中Portal领域中的Action的例子来说,这个接口主要作用是提供”在产品管理过程对各个动作的记录”的服务。


  在每一个接口中添加必要的annotation,并定义可能出现的error code,如下图所示:

<ignore_js_op style="word-wrap: break-word;">


  定义好所有的接口后执行mvn compile,生成对应的Swagger文件,将Swagger文件引入到Swagger UI中即可显示所有的REST API的定义:

<ignore_js_op style="word-wrap: break-word;">


  点击其中的任一API,即可看到API的详细定义,包括request参数,response以及model schema:

<ignore_js_op style="word-wrap: break-word;">


  跨地域沟通(数字化企业云平台开发地点分布在上海,北京,西安三地)是平台开发中面临的重要挑战之一,引入Swagger后可减少交流成本,规范接口定义,减少手工维护文档的工作,大大降低跨地域沟通带来的风险,让各个领域系统更协调高效地合作,也为数字化企业云平台后续的平台扩展做了坚实有力的支持。 

<ignore_js_op style="word-wrap: break-word;">


  在RESTful架构项目中引入Swagger对REST API进行文档管理的优势是显而易见的,数字化企业云平台后续也将基于自动生成的Swagger文件引入API Mock。


标签:定义,REST,AP,API,文档,接口,Swagger,RESTful
From: https://blog.51cto.com/u_6186189/6950803

相关文章

  • 个人微信开发API接口开发
    个人微信开发API接口可拓展功能说明1、个人微信多账号管理、聚合聊天、多个微信号同时登陆、多个微信号集中在一个窗口进行聊天,实现一人多号同时沟通快速提升沟通效率,提升微信营销效率。2、客服灵活分配:客服主管可自由分配微信号给指定客服,方便及时处理问题,也可随时转接给公司商务......
  • Django Rest Framework 教程及API向导
    DjangoRestFramework教程及API向导。一、请求(Request)REST_FRAMEWORK中的Request扩展了标准的HttpRequest,为REST_FRAMEWORK增加了灵活的request解析和request认证。1、请求.data:获取请求的主体,相当于request.POST和request.FILES.query_params:  request.GET的重命名.p......
  • nginx 常用功能之map映射
    nginx常用功能之map映射(本文背景:获取url不用的查询参数返回对应的数据)环境需求:现有url访问地址https://www.xxxxxx.com/page?account=xxxxx获取account传参不同的参数需要返回不同的文件内容一、先上配置项map$arg_account$json_file{default/default_null.json;user......
  • abp使用动态api客户端注意事项
    步骤按照官方的来就行API/DynamicCSharpAPIClients|DocumentationCenter|ABP.IO但有一点要注意,这也是官方文档没提及的,比如你在application这一层调用另一个项目的api客户端则要在application层的module里加上依赖,这个容易忘记。[DependsOn(typeof(Bank......
  • uniapp底部弹出层
    methods:{changeRelation(){uni.showActionSheet({itemList:['妻子','丈夫','妈妈','爸爸','爷爷','奶奶','儿子','女儿','兄弟姐妹','亲......
  • uniapp中使用微信支付
     超简单wx.requestPayment({ timeStamp:zhifu.timeStamp,//需要的参数,由后端返回 nonceStr:zhifu.nonceStr,//需要的参数,由后端返回 package:zhifu.prepayId,//需要的参数,由后端返回 signType:zhifu.signType,//需要的参数,由后端返回 paySign:zh......
  • Docker报swap限制警告
    docker告警Yourkerneldoesnotsupportswaplimitcapabilitiesorthecgroupisnotmounted.Memorylimitedwithoutswap./etc/default/grub文件末尾添加vi/etc/default/grub...GRUB_CMDLINE_LINUX="cgroup_enable=memoryswapaccount=1"更新grub,重启服务器updat......
  • CS客户端内嵌WebApi
    突然一天WPF客户端紧急需要一个功能被远程控制,于是第一想法便就是客户端充当服务身份。于是便客户的后台控制想法需求便出来了。记录一下工作上简单实现。publicclassWebApiHost{staticWebApplicationwebApp=null;publicstaticvoidStartWebA......
  • SnapGene - DNA序列生物分析 5.3.1 mac/win版
    SnapGene是一款用于DNA序列分析和生物学实验设计的专业软件。它提供了强大的功能和直观的界面,帮助科学家和研究人员在分子生物学领域进行高效的实验规划和分析。下面将为您详细介绍SnapGene的特点和功能。点击获取SnapGenemac/win版 DNA序列编辑:SnapGene提供了易于......
  • 多语言API接口接入电商平台获得商品快递费用源代码演示示例
     商品快递费用API接口的作用是通过调用接口获取特定商品的快递费用信息。具体而言,该接口可以提供以下功能和作用:实时获取快递费用:通过API接口可以实时查询不同快递公司对于指定商品的运费费用。用户可以根据商品的重量、尺寸、寄送地址等信息,调用接口获取最准确的快递费用。便于物......