写点什么

设计你的第一个 REST API:第二部分

  • 2019-11-11
  • 本文字数:2776 字

    阅读完需:约 9 分钟

设计你的第一个 REST API:第二部分

在上一篇文章——《设计你的第一个 REST:第一部分》,作者已经介绍了 REST API 的基本概念。

本文是 REST API 指南的第二部分,本文将重点介绍如何使用 SwaggerHub 设计一个简单的 API 。并解释 SwaggerHub 编辑器和开放 API 规范(Open API Specification)的基本功能。



这是我的 REST API 指南的第二部分,本文将重点介绍如何使用 SwaggerHub 设计一个简单的 API 。还将解释 SwaggerHub 编辑器和开放 API 规范(Open API Specification)的基本功能。我在上一篇文章中已经介绍了 REST API 的基本概念。

介绍

OpenAPI

OpenAPI 是一种编写 API 定义的格式,用于向人们和机器描述 API 的结构。OpenAPI 文件允许我们描述整个 API ,包括:


  • 可用端点以及每个端点上的操作

  • 每个操作的输入和输出参数

  • 身份验证方法

  • 联系信息、许可证、使用条款和其他信息


OpenAPI 规范 2.0 相关信息可以在这里找到。

Swagger

Swagger 是一组基于 OpenAPI 规范构建的开源工具,他可以帮助我们设计、构建、记录和使用 REST APIs。主要的 Swagger 工具包括:


  • Swagger Editor:基于浏览器的编辑器,我们可以在其中编写 OpenAPI 规范

  • Swagger UI :将 OpenAPI 规范渲染成交互式 API 文档

  • Swagger Codegen:根据 OpenAPI 规范生成服务端存根和客户端库


在我看来,使用 Swagger 设计 API 的主要优势在于能够生成交互式和自描述性文档。另一方面,我们可以使用相同的 Swagger 定义为超过 40 种不同的编程语言生成服务端和客户端存根。

开始使用 SwaggerHub

实际上,Swagger Editor 是官方免费的 UI 编辑器,可用于编写 Swagger 定义。SwaggerHub 是一个扩展的商业版编辑器,它能支持更多的特性,比如 goto 定义和协作。因为它们允许我们在 SwaggerHub 中创建免费帐户,所以我们可以使用它而不是 Swagger 编辑器。



首先,最重要的事情。如果我们还没有账户,可以这里创建一个免费帐户。登录后,我们将看到如下所示的界面。单击 Create New ->Create New API 开始设计我们的第一个 REST API 吧。


选择 Simple API 作为模板,为 API 提供一个名称(BookStore),然后单击 **Create API 按钮。它将创建一个新的 swagger 定义,该定义带有一个名为 Simple Inventory API **的示例 API。


Swagger 的基本元素

让我们看下,一个 swagger 定义中包含哪些基本元素。




在文件的顶部,我们可以看到版本;它是 2.0 或 3.0,这是最新版本。


然后,我们看到一个名为 info 的块,它包含了 API 的基本信息,如 API 的名称、描述、版本等。


下一个元素是 paths。这些是 API 中的 URL 路径。每个路径可以有一个或多个操作。在这个简单的库存 API 中,只有一个名为 /inventory 的路径存在,并且该路径有两个操作,即 GETPOST


下一个元素是 definitions,我们可以在这里定义可重用的组件并可以在路径中引用它们。


在 Swagger 中还有其他少数几个元素:


  • host:定义 API 的主机名

  • basePath :定义应该出现在定义路径之前的任何基路径

  • schemes:可以是 http、https、ws、wss 这些值

书店 API 定义

我们先从定义自己的 API 开始。我在上一篇文章中添加了 API 的框架。首先,将下面的内容粘贴到 swagger 编辑器中,开始定义。


swagger: '2.0'info:    title: Book Store API    description: This is an API for an online bookstore    version: v1paths:    /books:        get:        post:    /books/{book-id}:        get:        put:        delete:    /books/{book-id}/reviews:        get:        post:    /books/{book-id}/reviews/{review-id}:        put:        delete:definitions:    # Added by API Auto Mocking Plugin    host: mybookstore.com    basePath: /api/v1    schemes:        - https
复制代码


暂时先不要在意这些错误。我们很快就能将其修好。当我们将上述内容添加到编辑器中时,UI 应该如下所示,其中包含我们的书店 API 路径。



由于我们的 API 有两种资源:书籍和评论,所以我们需要在 swagger 中定义这两个对象。


definitions:    Book:        type: object        required:            - id            - name            - author            - price            - reviews        properties:            id:                type: string                example: B10001                description: Unique id of the book.            name:                type: string                example: The Adventures of Tom Sawyer                description: Name of the book.            author:                type: string                example: Mark Twain                description: Author of the book.            price:                type: string                example: $4.90                description: Price of the book.            reviews:                type: array                description: Reviews of the book.                items:                    $ref: '#/definitions/Review'    Review:        type: object        required:            - id            - score            - comment            - reviwer        properties:            id:                type: string                example: R1001234                description: Unique id of the review.            score:                type: string                example: 4.3                description: Review score.            comment:                type: string                example: Good book to read.                description: Review comment.            reviwer:                type: string                example: vihanga                description: Reviewer.
复制代码


单个书籍元素包含多个评论。注意我们如何在 book 对象中引用 Review 对象。将上述部分添加到 swagger 定义的末尾,并编辑路径**/books/{book id}** 的 GET 请求。


/books/{book-id}:    get:        summary: Retrieve the book resource indentified by the book-id.        operationId: getBook        description: Retrieve the book resource indentified by the book-id.        responses:            200:                description: Search results matching the given criteria.                schema:                $ref: '#/definitions/Book'
复制代码


现在, UI 将重新生成,我们可以展开**GET /books/{book id} **并看到如下所示的示例响应。



现在我们对这项任务已经有了基本的了解。您可以在 SwaggerHub 上找到这个书店的完整 swagger 定义;可以在这里找到 YAML 文件。仔细研究一下,试着自己开发一个新的吧。


希望本文对您有所帮助。


原文链接:


Designing Your First REST API – Part 2


2019-11-11 11:146770

评论

发布
暂无评论
发现更多内容

588次长征征程再添新星!我国成功发射卫星互联网低轨卫星

DevOps和数字孪生

航空航天

AI测试平台实战:自动化评分与多模型对比评测深度解析

测试人

基于开发者空间OpenGauss数据库的PLPGSQL实践二

华为云开发者联盟

sql opengauss 华为开发者空间

开源协同驱动能源管理革新:MyEMS 如何重塑行业生态

开源能源管理系统

开源 能源管理系统

深入解析Cairo静态分析工具Amarna:安全编程新利器

qife122

静态分析 区块链安全

Apache Flink错误处理实战手册:2年生产环境调试经验总结

Apache Flink

大数据 flink 实时计算

基于开发者空间云开发环境,使用MateChat+MaaS构建智能对话应用

华为云开发者联盟

MaaS 华为开发者空间 MateChat

大模型性能测试完全指南:从原理到实践

测试人

人工智能 软件测试 测试开发

为什么编码智能体可以重塑开发范式?

Comate编码助手

AI辅助编程 AI 编程 文心快码 文心快码Zulu

【新版发布】Apache DolphinScheduler 3.3.1 正式上线:更稳、更快、更安全!

白鲸开源

大数据 开源 大数据任务调度 Apache DolphinScheduler 发版

智慧物流车辆管理平台:全链路数字化解决方案

微擎应用市场

迈特趣视频创作 SaaS 系统:视频变现新工具

微擎应用市场

数字人超级大师:微擎生态下的高保真 AI 数字人解决方案

微擎应用市场

一键远程访问,Jellyfin媒体服务器+贝锐花生壳内网穿透教程

科技热闻

一键生成完整SpringBoot工程!飞算JavaAI 代码工具如何解决老项目重构痛点

飞算JavaAI开发助手

多点DMALL与OceanBase:实现租户间资源完全隔离与低成本系统升级

老纪的技术唠嗑局

oceanbase 国产数据库

云智慧CastrelAI:生成式AI重塑故障根因新范式

云智慧AIOps社区

智能运维 IT 运维 工单管理

DolphinScheduler API与SDK实战:版本管理、系统集成与扩展全指南

白鲸开源

大数据 开源 Apache DolphinScheduler API 管理 任务调度平台

短剧在线播放系统:专业化平台解决方案

微擎应用市场

从入门到精通:什么是态势感知

沃观Wovision

态势感知 海外舆情监控 沃观Wovision

Databend 亮相 DTCC 2025:存算分离架构引领湖仓一体化

Databend

手把手教你搭建MCP服务器

测吧(北京)科技有限公司

#人工智能 MCP

拒绝代码纠错不准、原有逻辑被改!飞算 JavaAI 行间预测功能实战解析

飞算JavaAI开发助手

行业分享丨AI赋能流体仿真:从虚拟风洞到智能设计的实践与案例

Altair RapidMiner

人工智能 AI 仿真 CAE hyperworks

产研协作必备!一键拆分用户故事,敏捷冲刺规划不要太轻松

职场工具箱

效率工具 产品经理 敏捷开发 在线白板 在线协作

知识图谱与RAG融合实战:用LightRAG极速构建智能问答系统

测吧(北京)科技有限公司

性能监控与剖析工具全指南:测试开发工程师必备利器

测试人

基于开发者空间知识推荐能力,搭建DeepSeek知识集

华为云开发者联盟

DeepSeek 华为开发者空间

IT管理员遇到了公司数据泄露问题,老板要让IT管理员出一个泄露报告, IT管理员怎么办?

运维有小邓

零碳园区:绿色转型的关键实践与智慧支撑

开源能源管理系统

开源 能源管理系统

AI 生成内容崛起,内容创作者如何避免被取代?

Wolink

人工智能、 海外营销推广 沃链Wolink 达人营销

设计你的第一个 REST API:第二部分_文化 & 方法_Vihanga Liyanage_InfoQ精选文章