在WSO2 API管理器中为后端服务和API定义定义URL模式和版本控制的推荐方法是什么?

时间:2018-12-11 08:38:27

标签: api wso2 wso2-am

在将我们的Java应用程序服务包含在WSO2 API Manager中时,我们面临一个问题。我们典型的后端应用程序在Tomcat上运行,并具有上下文路径,例如(/客户经理)。其Spring控制器使用以下格式定义端点:/api/VERSION/resource,例如:/api/v1/customers/api/v2/customers

因此,我们对后端的调用看起来像这样:http://localhost:8080/customer-manager/api/v1/customer。我们自动生成的swagger文档将REST路径信息发布为/customer-manager/api/v1/customers

现在,在WSO2中创建API定义时,我们被迫指定一个上下文路径和一个版本(/ customer-manager,v1),并且此信息被添加到API调用之前,因此我们的WSO2 API调用就像这样:

https://WSO2_HOST:WSO2_PORT/customer-manager/v1/customer-manager/api/v1/customers

如您所见,上下文路径和版本重复

所以这引起了一些问题:

  • 我们可以使后端应用程序摆脱它们自己的上下文路径,并将它们部署为Tomcat(ROOT.war)中唯一的应用程序。 是否期望后端应用程序没有上下文路径?

  • 为了不复制该版本,我们还可以将其从后端应用程序中删除,该应用程序现在具有更漂亮的URL:https://WSO2_HOST:WSO2_PORT/customer-manager/v1/api/customers。但是,在后端应用程序支持两个同时版本的API的情况下,我们如何区分应该处理哪个后端终结点?请注意,在以前的方法中,我们有两个后端映射/api/v1/customers/api/v2/customers,很明显哪个人将处理版本控制的呼叫。

1 个答案:

答案 0 :(得分:1)

在后端URL中具有上下文和版本详细信息是正常的,并非总是可能从后端中将其删除。通过查看问题,我假设您正在尝试使用swagger文件发布API。也许您必须检查一下为什么招摇的定义将“ / customer-manager / api / v1 / customers”设置为Rest路径(资源)。如果您可以更新后端以将“ / customer-manager / api /”设置为基本路径,将“ customer”设置为资源,则可以避免重复的上下文路径。

在这种情况下,您可以使用以下选项创建API。

Name: customer-manager
Context: /customer-manager/api
Version: v1
Resource: customers (This will be identified through Swagger definition)
Backend URL: http://localhost:8080/customer-manager/api/v1

如果无法更改swagger定义,则可以通过如上所述定义资源来在API Manager中创建API定义,而不使用基于Swagger的选项。在这种情况下,您可以使用设计新的REST API 选项。