简介:RESTful API开发中的版本控制是个很必要的问题。每个API的需求因需求而异,尤其是在API的进化和人员交流方面。本文将介绍如何从URI到请求头实现RESTful API版本控制,并提供相应的示例代码和指导意义。
URI 方式
最常见的 API 版本控制方式是基于URI的。这种方式的优点在于简单好用,但是文件系统在URI中义职分状况比较糟糕,特别是删除和移动。因此我们可以通过这种方式实现前缀版本的API URI如下:
----------------------------
这样做最简单的方式是用API版本号作为前缀。这种做法使得版本控制显而易见,同时也遵循了RESTful原则….
----------------------------
但是不能直接更新版本,版本迁移效果等也不好。接下来交介绍另一种方式:使用 Accept-Version header + Content-Type header 的方式。
Accept-Version Header + Content-Type Header
这种方式简化了URI,并加入了API版本数据。API的可用版本号由API消费者负责指定,而不是将API版本号硬编码到URI中。 Accept-Version header使消费者可以指定此API的版本,提供了很好的回溯方式。例如用户调用以下API:
--- ------------------------- --------------- ----- ------------- ----------------
API的生产者可以响应这个请求并返回包含1.0.0的用户数据的JSON格式的HTTP响应。如果有新版本可用(例如1.1.0),用户可以发送另一个请求以请求更新的数据:
--- ------------------------- --------------- ----- ------------- ----------------
API版本控制码示例代码
通过实现以下示例代码,演示如何实现Accept-Version + Content-Type的API版本控制方式:
----- ---- - ---------------- ----- --- - --------------- ----- ------ - ----------------------- ---- -- - ----- --------- - ------------------ ------ ----- ---- - ---------------------------------------- ---- ----- ----------------- - --------- --------- ----- -------------- - ------------------------------------------ - --- ----- - -------- - ------ - - - ---- -- ----- --- -------- - ----- ---------------- - ------------------------------------------------------ ---- ----- ------- - -------------------------------------------- - ---------------- - --------------- ----- -------- - ---------------- ------ -- ----- ----- -- -- --- ----------------------------- -------------------- ------------------------------- --------- ------------------ - ---- - -------------- - ---- ---------- - --- ------------------- -- -- - ------------------- -- --------- -- ------------------------ ---
通过以上简单示例,我们实现了一个接受Accept-Version + Content-Type方式请求的服务器。根据请求头信息(特别是Accept-Version),响应相应API版本的数据。
指导意义
- 不要在URI中硬编码API版本,而应使用Accept-Version + Content-Type来维护版本信息。
- 可以使用一些常规格式信息(例如,SemVer),并使用URI格式为Accept-Version来指定APICalls时的所需版本。
- 无论是ContentType还是Accept-Version,都可以进行扩展,例如加上版本名称,比如Accept-Version: v1.0.0。
- 在您的API文档中制定你的API版本历史和细节信息。
结论
在 API 设计和开发的过程中,版本控制是几乎不可避免的。URI方式相对简单且易于使用,但是若API在多个方面的变化较多,这样就会出现很多问题,如版本的可回溯性问题,如何实现版本来回迁移问题等。从 Accept-Version + Content-Type Header 方式相对来说更灵活,可以让客户端来控制版本的请求与响应。无论哪种方式,我们应该在实际使用中,考虑各种角度与方案,选择最适合的API版本控制方式,保证API对外稳定可靠。
来源:JavaScript中文网 ,转载请注明来源 本文地址:https://www.javascriptcn.com/post/671ae3089babaf620fa66913