Swagger2.0和resful规范

文章目录

前言

一、swagger2.0,resful,openApi3.0是什么?

二、restful协议的内容

1.restful

2.reful协议的误区

就是URI包含动词:因为"资源"表示一种实体,所以应该是名词,

URI中加入版本号:因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分

3.GET,DELETE,PUT和POST的典型用法:

GET

POST

PUT

DELETE

综上:

示例:一个user的管理

三.swagger协议

1.swagger2.0

2.swagger的内容

3.swagger官方文档速读

4.Specification 规格

Format格式

5.File Structure 文件结构

6.Data Types数据类型

7.Schema架构

8.Info Object元数据

 9. Contact Object联系对象

10. License Object许可对象

11.Paths Object

12.Operation Object 操作对象

总结: 实际工作中restful跟swagger的意义和使用

参考文献:






前言

面对层出不穷的语言,java为何屹立多年不倒。论简单不如python,性能上不如go,为什么大规模开发依然首选java。作为一名架构师,我深刻感悟着java之美。java的美和优势在于规范,虽然python,go也都有面向对象的设计和支持,但是在实践中往往都是面向过程。虽然都有各种代码要求但是在实践中往往都是随心所欲。优秀的java的逻辑能够让所有java人读懂,但是go和python就算是资深人员想去读懂别人,也需要些时间。swagger是一种规范,一种基于resful的规范。而二者是描绘接口协议的,今天我们一起去研读一下。





一、swagger2.0,resful,openApi3.0是什么?

resful是一种http协议规范,规定了常见的增删改查在控制层的语义体现,比如查询用get。。。

也是面向资源编程的体现。swagger2.0在resful基础上,规定了更多的细节,比如返回结构应该是什么样的,版本应该叫做什么,放在哪里。openApi3.0是swagger2.0的升级,当时swagger是基于apache的一些规范指定的,后来被Apache组织吸纳为开源项目,就在swagger2.0基础上完善,变成了openApi3.0,二者是父子关系,所以不存在openApi2.0或者swagger3.0.




二、restful协议的内容




1.restful

resful的全称:Resources Representational State Transfer资源的表现成状态转化,所谓"资源",就是网络上的一个实体,或者说是网络上的一个具体信息。它可以是一段文本、一张图片、一首歌曲、一种服务,总之就是一个具体的实在。GET用来获取资源,POST用来新建资源(也可以用于更新资源),PUT用来更新资源,DELETE用来删除资源。




2.reful协议的误区

  • 就是URI包含动词:因为"资源"表示一种实体,所以应该是名词,

举例来说,某个URI是/posts/show/1,其中show是动词,这个URI就设计错了,正确的写法应该是/posts/1,然后用GET方法表示show。

如果某些动作是HTTP动词表示不了的,你就应该把动作做成一种资源。比如网上汇款,从账户1向账户2汇款500元,错误的URI是:

  POST /accounts/1/transfer/500/to/2

正确的写法是把动词transfer改成名词transaction,资源不能是动词,但是可以是一种服务:

/transaction?from=1&to=2&amount=500.00
  • URI中加入版本号:因为不同的版本,可以理解成同一种资源的不同表现形式,所以应该采用同一个URI。版本号可以在HTTP请求头信息的Accept字段中进行区分

3.GET,DELETE,PUT和POST的典型用法:

GET

  • 安全且幂等
  • 获取表示
  • 变更时获取表示(缓存)
  • 200(OK) - 表示已在响应中发出
  • 204(无内容) - 资源有空表示
  • 301(Moved Permanently) - 资源的URI已被更新
  • 303(See Other) - 其他(如,负载均衡)
  • 304(not modified)- 资源未更改(缓存)
  • 400 (bad request)- 指代坏请求(如,参数错误)
  • 404 (not found)- 资源不存在
  • 406 (not acceptable)- 服务端不支持所需表示
  • 500 (internal server error)- 通用错误响应
  • 503 (Service Unavailable)- 服务端当前无法处理请求

POST

  • 不安全且不幂等
  • 使用服务端管理的(自动产生)的实例号创建资源
  • 创建子资源
  • 部分更新资源
  • 如果没有被修改,则不过更新资源(乐观锁)
  • 200(OK)- 如果现有资源已被更改
  • 201(created)- 如果新资源被创建
  • 202(accepted)- 已接受处理请求但尚未完成(异步处理)
  • 301(Moved Permanently)- 资源的URI被更新
  • 303(See Other)- 其他(如,负载均衡)
  • 400(bad request)- 指代坏请求
  • 404 (not found)- 资源不存在
  • 406 (not acceptable)- 服务端不支持所需表示
  • 409 (conflict)- 通用冲突
  • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
  • 415 (unsupported media type)- 接受到的表示不受支持
  • 500 (internal server error)- 通用错误响应
  • 503 (Service Unavailable)- 服务当前无法处理请求

PUT

  • 不安全但幂等
  • 用客户端管理的实例号创建一个资源
  • 通过替换的方式更新资源
  • 如果未被修改,则更新资源(乐观锁)
  • 200 (OK)- 如果已存在资源被更改
  • 201 (created)- 如果新资源被创建
  • 301(Moved Permanently)- 资源的URI已更改
  • 303 (See Other)- 其他(如,负载均衡)
  • 400 (bad request)- 指代坏请求
  • 404 (not found)- 资源不存在
  • 406 (not acceptable)- 服务端不支持所需表示
  • 409 (conflict)- 通用冲突
  • 412 (Precondition Failed)- 前置条件失败(如执行条件更新时的冲突)
  • 415 (unsupported media type)- 接受到的表示不受支持
  • 500 (internal server error)- 通用错误响应
  • 503 (Service Unavailable)- 服务当前无法处理请求

DELETE

  • 不安全但幂等
  • 删除资源
  • 200 (OK)- 资源已被删除
  • 301 (Moved Permanently)- 资源的URI已更改
  • 303 (See Other)- 其他,如负载均衡
  • 400 (bad request)- 指代坏请求
  • 404 (not found)- 资源不存在
  • 409 (conflict)- 通用冲突
  • 500 (internal server error)- 通用错误响应
  • 503 (Service Unavailable)- 服务端当前无法处理请求

综上:

查询:用Get http://资源url/{资源id}

新增和修改:用post和put,区别在于所创建的资源的名称(URI)是否由客户端决定。 更为通用的方式是post用于新增,put用于修改,

删除:delete

示例:一个user的管理

GET:  http://user?{userId}

POST: http://user    body体:{user对象}

PUT: http://user?{userId}   body体:{user对象}

DELETE:  http://user?{userId}

分别具化为user的增删改查

三.swagger协议

1.swagger2.0

restful规定了接口http url规范和返回的httpcode规范,但是如何用标准的计算机语言描述一个接口,而不是通过自然语义。这就是swagger以openApi干的事情,通过标准化的json文档或者yaml文档来描述

2.swagger的内容

官网的地址:OpenAPI Design & Documentation Tools | SwaggerAPI developer tools for the OpenAPI Specification(OAS), enabling development across the entire API lifecycle, from design and documentation, to test and deployment. Join millions of other Swagger users today.https://swagger.io/tools/open-source/不过一般时候打不开。建议用ie浏览器,google会有协议冲突。

我做了个离线版的https://download.csdn.net/download/habazhu1110/34641117https://download.csdn.net/download/habazhu1110/34641117

3.swagger官方文档速读

Definitions定义

  • 路径模板是指使用花括号 ({}) 将 URL 路径的一部分标记为可使用路径参数替换。
  • 子类型
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
  • HTTP Status Codes

Hypertext Transfer Protocol (HTTP) Status Code Registry 遵循标准规范

4.Specification 规格

  • Format格式

使用json或者是yaml的方式来描述

5.File Structure 文件结构

可以使用自定义部分,然后用$ref的方式来引用,规范的文件名应该叫做swagger.json

6.Data Types数据类型

包括了Integer。。。。。

7.Schema架构

这里特别说几个点

definitions : 自定义的结构, 然后可以用$ref来引用

允许扩展 Swagger 架构。 字段名称必须以 x- 开头,例如 x-internal-id。 该值可以是 null、原始值、数组或对象。 有关更多详细信息,请参阅供应商扩展。

8.Info Object元数据

该对象提供有关 API 的元数据。 如果需要,客户端可以使用元数据,并且可以在 Swagger-UI 中呈现以方便使用。

 9. Contact Object联系对象

10. License Object许可对象

11.Paths Object

get:
  description: Returns pets based on ID
  summary: Find pets by ID
  operationId: getPetsById
  produces:
  - application/json
  - text/html
  responses:
    '200':
      description: pet response
      schema:
        type: array
        items:
          $ref: '#/definitions/Pet'
    default:
      description: error payload
      schema:
        $ref: '#/definitions/ErrorModel'
parameters:
- name: id
  in: path
  description: ID of pet to use
  required: true
  type: array
  items:
    type: string
  collectionFormat: csv

12.Operation Object 操作对象

......

里面层层迭代展开每一个jsonkey的含义. 

总结: 实际工作中restful跟swagger的意义和使用

restful的意义在于能够面向资源展示语义, swagger的意义在于可以输出标准化的接口描述文档,然后与其他的平台和工具对接,比如swagger自带的工具.

实际工作中swagger文档的生成用的是工具生成, 解析上也有很多自动化工具可以把文档解析成bean, 甚至是根据文档可以生成自动化测试用例以及可视化页面.

参考文献:

理解RESTful架构 - 阮一峰的网络日志

RESTful 架构详解 | 菜鸟教程

OpenAPI Design & Documentation Tools | Swagger

REST资源命名指南 | RESTful API 中文网

API 响应 - RESTful API 一种流行的 API 设计风格

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值