可落地业务建模(4):将模型实现为 RESTful API
2023-09-15 17:35:20
前言
在上一篇文章中,我们讨论了如何将业务模型落地为代码。在这一篇中,我们将进一步探讨如何将模型实现为 RESTful API,以便于向外界提供服务。RESTful API 是一种基于 HTTP 协议的网络应用程序编程接口,它以资源为中心,使用统一的接口来操作资源。
什么风格的 API 适合作为模型 API
在选择 API 风格之前,我们需要考虑以下几个因素:
- 业务需求: API 需要支持哪些功能?
- 技术限制: API 需要运行在什么样的环境中?
- 安全要求: API 需要提供什么样的安全保障?
对于模型 API,我们通常会选择 RESTful API,因为 RESTful API 具有以下优点:
- 资源中心: RESTful API 以资源为中心,可以很好地映射业务模型中的实体。
- 统一接口: RESTful API 使用统一的接口来操作资源,易于理解和使用。
- 可扩展性: RESTful API 可以很容易地扩展,以支持新的功能和需求。
- 安全性: RESTful API 可以提供多种安全机制,以保护数据和资源。
行为角度
在将模型映射为 RESTful API 时,我们需要考虑如何将模型中的行为映射为 API 操作。通常,我们可以将模型中的行为映射为以下几种 API 操作:
- 创建: 创建新的资源。
- 读取: 读取现有资源。
- 更新: 更新现有资源。
- 删除: 删除现有资源。
数据角度
在将模型映射为 RESTful API 时,我们需要考虑如何将模型中的数据映射为 API 资源。通常,我们可以将模型中的数据映射为以下几种 API 资源:
- 实体: 模型中的实体可以映射为 API 资源。例如,我们可以将产品实体映射为
/products
资源。 - 集合: 模型中的集合可以映射为 API 资源。例如,我们可以将订单集合映射为
/orders
资源。 - 属性: 模型中的属性可以映射为 API 资源的属性。例如,我们可以将产品的名称属性映射为
/products/{id}/name
资源。
将模型映射为 RESTful API
通过 URI 表示领域模型
URI 是统一资源标识符,它用于标识互联网上的资源。在 RESTful API 中,URI 用于标识 API 资源。我们可以通过 URI 来表示领域模型中的实体和集合。例如,我们可以使用以下 URI 来表示产品实体:
/products/{id}
其中,{id}
是产品的唯一标识符。
根据 URI 设计 API
我们可以根据 URI 来设计 API 操作。例如,我们可以使用以下 API 操作来操作产品实体:
- GET /products/{id}: 获取指定产品的信息。
- POST /products: 创建新产品。
- PUT /products/{id}: 更新指定产品的信息。
- DELETE /products/{id}: 删除指定产品。
使用分布式超媒体设计 API 中涉及的资源
分布式超媒体是一种用于在分布式系统中表示资源的规范。在 RESTful API 中,我们可以使用分布式超媒体来设计 API 中涉及的资源。例如,我们可以使用以下分布式超媒体链接来表示产品实体:
<link rel="self" href="/products/{id}">
<link rel="create" href="/products">
<link rel="update" href="/products/{id}">
<link rel="delete" href="/products/{id}">
使 API 适应不同业务需求
在将模型映射为 RESTful API 时,我们需要考虑如何使 API 适应不同的业务需求。例如,我们可以通过以下方式来使 API 适应不同的业务需求:
- 使用不同的 HTTP 方法: 我们可以使用不同的 HTTP 方法来表示不同的 API 操作。例如,我们可以使用
GET
方法来获取资源信息,使用POST
方法来创建资源,使用PUT
方法来更新资源,使用DELETE
方法来删除资源。 - 使用不同的数据格式: 我们可以使用不同的数据格式来表示 API 资源。例如,我们可以使用 JSON 格式来表示 API 资源,也可以使用 XML 格式来表示 API 资源。
- 使用不同的安全机制: 我们可以使用不同的安全机制来保护 API 资源。例如,我们可以使用 OAuth 2.0 来保护 API 资源,也可以使用 JWT 来保护 API 资源。
结语
在这一篇中,我们讨论了如何将领域模型映射为 RESTful API。我们首先讨论了 RESTful API 的优点,然后讨论了如何根据业务需求、技术限制和安全要求来选择合适的 API 风格。接下来,我们讨论了如何将模型中的行为和数据映射为 API 操作和资源。最后,我们讨论了如何使 API 适应不同的业务需求。希望这些内容对您有所帮助。