标签: api-versioning

SpringBoot/Kotlin 和通过内容协商进行版本控制:正确的方法?

我一直在尝试使用 Content Negotiation 作为 SpringBoot/Kotlin 应用程序的后端版本控制。我有以下几点:

 @GetMapping("/user", produces = [MediaType.APPLICATION_JSON_VALUE])
      fun getUsers() {
        //some code here
      }
Run Code Online (Sandbox Code Playgroud)

我发现这个项目结合了“接受”标头和“接受版本”自定义标头。我想知道这是否是实现内容协商方法的正确方法,如果不是,我该如何解决?

@GetMapping("/user", produces = [MediaType.APPLICATION_JSON_VALUE], headers = ["Accept-Version=$CUSTOM_ACCEPT_HEADER"])
          fun getUsers() {
            //some code here
          }

object VersioningUtility {
  const val CUSTOM_ACCEPT_HEADER = "vnd.sample.com-v1+json"
  //here more constants as each controller can be versioned independently
}
Run Code Online (Sandbox Code Playgroud)

谢谢

kotlin spring-boot api-versioning

4
推荐指数
1
解决办法
356
查看次数

使用 AWS API Gateway 进行 API 版本控制

我在使用 API Gateway + Lambda 实现可行的版本控制方案时遇到问题。我的要求是在 API 级别进行主要版本控制,然后在服务级别进行次要版本控制。我的环境也分布在各个帐户中,因此暂存不是 env 传播的选项。有没有人使用 AWS API Gateway 成功实现 API 管理?

amazon-web-services aws-lambda api-versioning aws-api-gateway

2
推荐指数
1
解决办法
4826
查看次数

使用 HATEOAS 对耦合 RESTful API 进行版本控制

我们可以ProductsAPI浏览我们网站上可用的产品,这些产品由我们的移动应用程序(Android 和 iOS)使用。以下是基本设计:

URL: /api/products/
Response:
[
    {
        "id" : 123,
        "name" : "abc",
        "detailsUrl" : "/api/products/123"
    },
    {
        "id" : 124,
        "name" : "xyz",
        "detailsUrl" : "/api/products/124"
    }
]
Run Code Online (Sandbox Code Playgroud)

此处detailsUrl包含ProductDetails页面的 API URL 。

现在,我们需要ProductDetails在新版本的应用程序中对API的响应进行一些更改,并且需要对其进行版本控制。URL 将更改为 - /api/v2/products/{id}(我们通过 URL 使用 API 版本控制)。

由于我们不想要以前版本的应用程序中的新响应,我们需要创建一个新版本的ProductsAPI也将发送新的ProductDetailsAPIurl 作为响应。

API 以这种方式耦合。如果我们更改任何子 API 的版本,则父 API 版本也需要更改。处理此问题的推荐方法是什么?我们是否应该改变我们的 API 版本控制方式(使用标头或其他东西)?

api rest hateoas restful-architecture api-versioning

2
推荐指数
1
解决办法
1594
查看次数

ASP.net Web Api版本控制

我有ASP.net Web Api项目,因此我决定该支持版本了。我正在使用官方的Microsoft Nuget支持版本控制(更多信息在此处),我决定按名称空间进行版本控制(如此处所示)。

不幸的是我无法使代码正常工作。如果我这样调用我的方法:

http://localhost:7291/api/Saved/GetNumberOfSavedWorkoutsForUser?api-version=2.0
Run Code Online (Sandbox Code Playgroud)

我得到错误:

Multiple types were found that match the controller named 'Saved'. This can happen if the route that services this request ('api/{controller}/{action}/{id}') found multiple controllers defined with the same name but differing namespaces, which is not supported.
Run Code Online (Sandbox Code Playgroud)

如果我这样称呼它: http://localhost:7291/v2/Saved/GetNumberOfSavedWorkoutsForUser

我收到错误404:

The resource you are looking for has been removed, had its name changed, or is temporarily unavailable.
Run Code Online (Sandbox Code Playgroud)

我不确定自己在做什么错。这是我的代码:

启动文件

public void Configuration(IAppBuilder app)
    {
        var configuration = new HttpConfiguration();
        var …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc asp.net-web-api api-versioning

2
推荐指数
1
解决办法
8076
查看次数

在 asp.net core 3.1 web api 中,分组和版本控制在 swagger 中不能很好地协同工作

我正在使用Asp.Net Core 3.1来构建我的 API。我正在使用 swagger 为我的 API 生成文档。我决定根据控制器对我的 swagger 文档进行分组。所以我最终这样做了,

启动 - 配置服务:

options.SwaggerDoc(
    "LibraryOpenAPISpecificationCategories",
    ...
Run Code Online (Sandbox Code Playgroud)

启动 - 配置:

options.SwaggerEndpoint(
    "/swagger/LibraryOpenAPISpecificationCategories/swagger.json",
    "Library API (Categories)");
Run Code Online (Sandbox Code Playgroud)

控制器:

[Route("api/categories")]
[ApiController]
[ApiExplorerSettings(GroupName = "LibraryOpenAPISpecificationCategories")]
public class CategoriesController : ControllerBase
Run Code Online (Sandbox Code Playgroud)

到目前为止,一切正常。当我添加版本控制时,Swagger 文档停止显示控制器中的方法。我试图在版本中进行分组,以便每个版本都有这样的组,

V1 -> LibraryOpenAPISpecificationCategories

V1 -> LibraryOpenAPISpecificationItems

V2 -> LibraryOpenAPISpecificationCategories

V2 -> LibraryOpenAPISpecificationItems

这是我所做的,

启动 - 配置服务:

services.AddVersionedApiExplorer(options =>
{
    options.GroupNameFormat = "'v'VV";
});

services.AddApiVersioning(options =>
{
    options.AssumeDefaultVersionWhenUnspecified = true;
    options.DefaultApiVersion = new ApiVersion(1, 0);
    options.ReportApiVersions = true;
});

var apiVersionDescriptionProvider = …
Run Code Online (Sandbox Code Playgroud)

c# swagger swashbuckle api-versioning asp.net-core-webapi

2
推荐指数
1
解决办法
1340
查看次数

Symfony 中的 API 版本控制

我一直试图在 Symfony 中寻找版本控制的解决方案。在 Symfony 中进行 API 版本控制的最佳方法是什么。在 Laravel 这很简单,请看这里

您只需将 V1/V2 等不同文件夹中的所有内容分开,然后创建指向该文件夹(命名空间)的路由。但 Symfony 的工作方式不同,它使用注解来创建路由

api symfony api-versioning symfony4

1
推荐指数
1
解决办法
2542
查看次数

使用 nextjs 和 vercel 管理 API 版本

我开始使用 nextjs 和 Vercel 部署构建一个 API。设置非常简单,只需在pages/api/. 例如创建端点/shows/movies/sports有:

./pages/api/
    /shows
    /movies
    /sports
Run Code Online (Sandbox Code Playgroud)

这很好,但我想像这样对 API 进行版本控制:/v1/shows//v1/movies等等。

如果我可以基于 git commit 标签进行版本控制就更好了。也就是说,当我合并到main分支时,Vercel 要么部署到当前的生产环境(例如 v1 env),或者如果有新的 git 标签,它就会部署到新的生产环境(例如 v2 env)。部署后,两个生产环境将上线(v1 和 v2),因此旧客户端不会中断。

有没有办法用 Vercel 做到这一点?或者我缺少更简单的方法吗?其他人如何使用 nextjs 处理 API 版本控制?我对想法持开放态度!

api-versioning next.js vercel

1
推荐指数
1
解决办法
1840
查看次数

使用 WebAPI .Net Core 进行版本控制无法按预期工作

我正在尝试将 URL 版本控制引入到我的 .Net Core WebAPI 应用程序中。我还使用 Swagger Web 工具以方便用户使用。

现在,在尝试将版本控制引入我的应用程序时,我在这里引用了文档:https : //github.com/Microsoft/aspnet-api-versioning/wiki/New-Services-Quick-Start#aspnet-core

现在,我对我的代码进行了以下代码更改:

Startup.cs/ConfigureServices 我在下面添加了代码:

services.AddApiVersioning(options => {
                    options.AssumeDefaultVersionWhenUnspecified = true;
                });
Run Code Online (Sandbox Code Playgroud)

现在,在添加任何类型的版本控制之前,我的控制器注释如下所示:

    [Produces("application/json")]
    [Route("api/controllerName")]
Run Code Online (Sandbox Code Playgroud)

并生成一个如下所示的 URL:

http://localhost:12003/swagger/#!/Workspace/GetAll

现在,我在下面添加了注释以启用 api 版本控制:

. [ApiVersion("1.0")] [Produces("application/json")] [Route("api/v{version:apiVersion}/workspace")]

现在当我点击我的 swagger UI 中列出的相同方法时

网址如下所示:

http://localhost:12003/swagger/#!/controllername/ApiV_versionGetAll

虽然我期待的是这样的:

http://localhost:12003/swagger/#!/controllername/V1.0/GetAll

同样在我的招摇中,它现在明确要求我输入版本号。所以我认为我的问题归结为两个要点:

  • 如何修复我的网址?我做错了什么?
  • 当我在控制器的注释中明确声明版本将是 1.0 时,为什么 swagger 现在要求我在 API UI 中输入版本号?

restful-url swagger api-versioning asp.net-core asp.net-core-webapi

0
推荐指数
1
解决办法
2201
查看次数