REST-API 版本控制策略

2023-10-16 05:36
文章标签 api 版本 rest 控制策略

本文主要是介绍REST-API 版本控制策略,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

管理分布式异构系统的应用程序编程接口 (API) 的方法不同于 Apache Maven 提供的经典工具,后者旨在简化技术上和同质相似工件的组装构建过程。这种经典的依赖管理工具的局限性在管理技术不同且独立的系统之间的 API 的上下文中变得明显,例如,表述性状态传输 (REST-API) 等 API 确保其网络功能。

服务提供商(可能会提供一些已实施的 API 版本)与其消费者之间的相互契约起着至关重要的作用,因此需要另一种方法来通过设计保证契约长期运行。此外,Apache Maven 通过区分三位数字来使用语义版本控制对于 REST-API 来说是不现实的。

因此,所应用的语义方案有意仅区分主要版本,其中每个增量都代表重大更改。在这篇立场论文中,作者强调,为了使 REST-API 的版本控制概念有效且可持续,软件工程师必须了解不同方法的功能和局限性,以及哪种方法最有效地与底层传输的功能保持一致技术。

介绍

应用程序编程接口(API)帮助公司集成应用程序甚至构建新的生态系统。通过 API 促进服务创新和货币化是一种趋势,这在许多领域都得到了认可。通过接口增强的系统不仅在工业中发挥着决定性作用,这决定了工业4.0的一部分,特别是智能工厂,而且在金融领域也发挥着决定性作用,例如遵守开放银行指令。[1][2]

具象状态传输 (REST)-API 的进步为跨异构系统的通信铺平了道路,其中大多数应用程序都具有不同的性质。然而,对 REST-API 版本控制的看法不同,并且构成了一篇很少撰写的论文,不仅从科学的角度来看。在本文中,术语 API 一般指 REST-API。虽然拥护者认为任何 API 都应该采用版本控制标识符,以便为可能存在向后不兼容的更改做好准备,这描述了重大更改的概念,但反对者声称绝大多数应用程序甚至不会受到这种程度的更改因此,根本不需要版本控制。 

然而,可维护 API 的设计给许多软件架构师和开发人员带来了许多挑战。尽管已经提出了许多策略来寻找有效的方法来应对重大变更,但当共存 API 的数量不断增加时,所有这些策略都给组织带来了共同的负担。简要介绍状态传输中涉及的每项技术,例如域名系统 (DNS)、统一资源定位符 (URL)、统一资源标识符 (URI) 和超文本传输​​协议 (HTTP),对于了解其主要技术是必要的。函数,因为它们中的每一个都构建了各种方法的关键元素。

域名系统

广泛使用的名为 DNS 的翻译服务可将互联网协议 (IP) 地址解析为人类友好的名称,反之亦然,通过利用可分离名称的分层排列,提供全局唯一性、稳健性、可扩展性和发现功能。自大约 30 年前推出以来,DNS 在支持协议和可扩展性方面不断发展。

虽然名称仍然比数字地址更有助于记住对象,但其背后的可识别资源和信息已变得更加通用,尤其是由于近年来应用程序界面的显着增长。然而,无处不在的物联网等新兴技术对这一全球标准的原有特性提出了挑战。

根据参考文献 [3],DNS 并不是为当今受物联网影响的世界中的移动性、效率和安全性方面的要求而设计的。层次结构越深,解析机制的延迟就会增加。健壮性和敏捷性之间存在另一个矛盾的问题,前者需要管理庞大的命名空间,而子域需要敏捷性以按需识别资源。

网址和统一资源标识符

尽管 URI 和 URL 这两个术语之间有明显区别,但它们通常被认为是等效的,但是,每个术语都是针对特定类型的资源管理而设计的。URI 处理对象的标识,而 URL 则描述可识别元素的位置。然而,由于 URL 也标识对象,因此它与 URI 具有相同的特征,但情况并非相反。[4] 换句话说,URI 是用来标识资源的,这些资源的存在、位置并不重要,因此与 URL 形成鲜明对比。[5]

Web 发明者兼万维网联盟 (W3C) 总监 Berners-Lee 撰文阐述了制定旨在实现 URI 不变的策略的重要性。[6] 此外,酷 URI 的概念旨在防止技术和组织变革期间标识符数量的增加,以符合万维网的架构建议。[7] [8] 相反,如果允许底层技术影响命名方案,那么技术的任何变化都可能对 URL 的关键概念产生不利影响,从而导致任意演变。[4]

HTTP协议

HTTP 是指 ISO/OSI 模型中定义的应用层传输协议,自 1990 年起就被 WWW 倡议使用。 [9] [10] 除了 HTTP 具有传输层安全性 (TLS) 的安全版本(即 HTTPS)之外, HTTP 消息由标头和正文组成,前者旨在将元数据与有效负载分开。

更准确地说,标头由一组值对组成,用于将元数据绑定到正在由应用程序处理的有效负载。因此,HTTP 标头使客户端和服务器能够分别以键值方式向其请求和响应传递附加信息。

例如,数据表示的协商是 HTTP 的一个关键功能,它为客户端(例如 Web 浏览器)提供了一定的灵活性。本质上,应用程序通过以下维度表达其对数据表示的偏好:​​媒体类型、语言、压缩和字符集。

这篇关于REST-API 版本控制策略的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/219389

相关文章

Java调用DeepSeek API的最佳实践及详细代码示例

《Java调用DeepSeekAPI的最佳实践及详细代码示例》:本文主要介绍如何使用Java调用DeepSeekAPI,包括获取API密钥、添加HTTP客户端依赖、创建HTTP请求、处理响应、... 目录1. 获取API密钥2. 添加HTTP客户端依赖3. 创建HTTP请求4. 处理响应5. 错误处理6.

Deepseek R1模型本地化部署+API接口调用详细教程(释放AI生产力)

《DeepseekR1模型本地化部署+API接口调用详细教程(释放AI生产力)》本文介绍了本地部署DeepSeekR1模型和通过API调用将其集成到VSCode中的过程,作者详细步骤展示了如何下载和... 目录前言一、deepseek R1模型与chatGPT o1系列模型对比二、本地部署步骤1.安装oll

浅析如何使用Swagger生成带权限控制的API文档

《浅析如何使用Swagger生成带权限控制的API文档》当涉及到权限控制时,如何生成既安全又详细的API文档就成了一个关键问题,所以这篇文章小编就来和大家好好聊聊如何用Swagger来生成带有... 目录准备工作配置 Swagger权限控制给 API 加上权限注解查看文档注意事项在咱们的开发工作里,API

一分钟带你上手Python调用DeepSeek的API

《一分钟带你上手Python调用DeepSeek的API》最近DeepSeek非常火,作为一枚对前言技术非常关注的程序员来说,自然都想对接DeepSeek的API来体验一把,下面小编就来为大家介绍一下... 目录前言免费体验API-Key申请首次调用API基本概念最小单元推理模型智能体自定义界面总结前言最

JAVA调用Deepseek的api完成基本对话简单代码示例

《JAVA调用Deepseek的api完成基本对话简单代码示例》:本文主要介绍JAVA调用Deepseek的api完成基本对话的相关资料,文中详细讲解了如何获取DeepSeekAPI密钥、添加H... 获取API密钥首先,从DeepSeek平台获取API密钥,用于身份验证。添加HTTP客户端依赖使用Jav

java中不同版本JSONObject区别小结

《java中不同版本JSONObject区别小结》本文主要介绍了java中不同版本JSONObject区别小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们... 目录1. FastjsON2. Jackson3. Gson4. org.json6. 总结在Jav

C#使用DeepSeek API实现自然语言处理,文本分类和情感分析

《C#使用DeepSeekAPI实现自然语言处理,文本分类和情感分析》在C#中使用DeepSeekAPI可以实现多种功能,例如自然语言处理、文本分类、情感分析等,本文主要为大家介绍了具体实现步骤,... 目录准备工作文本生成文本分类问答系统代码生成翻译功能文本摘要文本校对图像描述生成总结在C#中使用Deep

5分钟获取deepseek api并搭建简易问答应用

《5分钟获取deepseekapi并搭建简易问答应用》本文主要介绍了5分钟获取deepseekapi并搭建简易问答应用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需... 目录1、获取api2、获取base_url和chat_model3、配置模型参数方法一:终端中临时将加

使用DeepSeek API 结合VSCode提升开发效率

《使用DeepSeekAPI结合VSCode提升开发效率》:本文主要介绍DeepSeekAPI与VisualStudioCode(VSCode)结合使用,以提升软件开发效率,具有一定的参考价值... 目录引言准备工作安装必要的 VSCode 扩展配置 DeepSeek API1. 创建 API 请求文件2.

golang1.23版本之前 Timer Reset方法无法正确使用

《golang1.23版本之前TimerReset方法无法正确使用》在Go1.23之前,使用`time.Reset`函数时需要先调用`Stop`并明确从timer的channel中抽取出东西,以避... 目录golang1.23 之前 Reset ​到底有什么问题golang1.23 之前到底应该如何正确的