RESTful API开发中的版本控制:从URI到请求头

简介: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