이 글은 주로 ASP.Net Core WebApi의 여러 버전 컨트롤 비교에 대한 간단한 논의를 소개합니다. 편집자는 이것이 꽤 좋다고 생각하므로 지금 공유하고 참고용으로 제공하겠습니다. 에디터를 따라가서 살펴볼까요
1. 버전 관리의 장점:
(1) 기존 시스템을 손상시키지 않고 적시에 기능을 실행하는 데 도움이 됩니다.
(2) 선택한 고객에게 추가 기능을 제공하는 데 도움이 될 수도 있습니다.
API 버전 관리는 다음과 같이 다양한 방법으로 제어할 수 있습니다.
(1) URL에 버전을 추가하거나 쿼리 문자열 매개변수로
(2) 사용자 정의 헤더를 사용하고 헤더를 허용하여
이 문서에서는 여러 버전의 ASP.NET Core Web API를 지원하는 방법을 살펴보겠습니다.
1 asp.net 핵심 webapi 프로젝트를 만들고 NuGet 패키지를 참조합니다. Install-Package Microsoft.AspNetCore.Mvc.Versioning -Version 2.0.0
프로젝트 및 설치 패키지가 준비되었습니다. , 그런 다음 Startup.cs의 ConfigureServices 메서드에 다음 코드를 추가해야 합니다.
보시다시피 3가지 옵션이 구성되어 있습니다.
ReportAPIVersions: 이는 선택 사항입니다. 그러나 true로 설정하면 API는 응답 헤더에 지원되는 버전 정보를 반환합니다.
AssumeDefaultVersionWhenUnspecified: 이 옵션은 버전을 제공하지 않는 요청에 사용됩니다. 기본적으로 가정된 API 버전은 1.0입니다.
DefaultApiVersion: 이 옵션은 요청에 버전이 지정되지 않은 경우 사용할 기본 API 버전을 지정하는 데 사용됩니다. 기본값은 버전 1.0입니다.
구성 및 설정이 모두 완료되었습니다. 이제 API 버전에 액세스하는 다양한 방법을 살펴보겠습니다.
2. QueryString을 통해 버전 제어 구현
다음 코드와 같이 컨트롤러를 열고 ApiVersion 기능을 추가합니다.
위 코드는 버전 1.0으로 간주됩니다. 다른 네임스페이스에 동일한 이름을 가진 다른 컨트롤러 클래스를 만들고 API 버전을 버전 2.0으로 설정할 수도 있습니다. 아래 그림과 같이:
그렇습니다. 이제 브라우저로 이동하여 컨트롤러에 액세스하십시오. 기본값으로 설정된 API 버전 1.0 컨트롤러의 출력이 표시됩니다. 이제 URL에 api-version=2를 추가하면 api 버전 2.0 컨트롤러의 출력이 표시됩니다.
2. URL 경로 세그먼트를 통해 구현:
쿼리 문자열 매개변수는 유용하지만 긴 URL 및 기타 쿼리 문자열 매개변수의 경우 어려울 수 있습니다. 대신, 더 나은 접근 방식은 URL 경로에 버전을 추가하는 것입니다. 예:
api/v1/values
api/v2/values
여전히 위 프로젝트이지만 v1 및 v2 컨트롤러에 다음 코드를 추가해야 합니다. 아래와 같이:
마찬가지로 라우팅 매개변수를 적용 가능한 모든 위치로 업데이트해야 합니다. 이번 변경으로 인해 API 인터페이스에 액세스할 때 항상 버전 번호가 필요합니다. api/v1/values를 통해 버전 1.0에 액세스하고, api/v2/values를 통해 버전 2.0에 액세스하고, URL에서 버전 번호를 변경할 수 있습니다. 심플하고 더 깔끔해 보이네요.
테스트 결과는 다음과 같습니다.
3. HTTP 헤더를 통한 버전 관리 구현
위 두 가지 방법 모두 버전 관리를 지원하도록 URL을 수정해야 합니다. 그러나 API의 URL을 깨끗하게 유지하려면 HTTP 헤더를 추가하여 API 버전 정보를 전달할 수도 있습니다. 이 작업을 수행하려면 ApiVersionReader 옵션을 구성해야 합니다. 코드는 다음과 같습니다:
강조 표시된 줄은 이제 헤더 "api-version"이 API 버전 번호의 예상 위치임을 나타냅니다. 경로 속성에 버전 세부정보가 없는지 확인하세요. 테스트 결과는 다음과 같습니다.
"api 버전"에 2.0을 값으로 제공하면 버전 2.0 컨트롤러를 호출하고 출력을 반환합니다.
간단하고 쉽게 설정할 수 있습니다. 그러나 이제 버전 관리를 위한 쿼리 문자열 매개 변수 방법이 작동하지 않습니다. 헤더가 설정되면 쿼리 문자열 매개변수를 지정할 수 없습니다. 두 경우를 모두 지원하려면 HeaderApiVersionReader 대신 QueryStringOrHeaderApiVersionReader를 사용하세요. 코드는 다음과 같습니다.
따라서 이제 쿼리 문자열 매개변수와 헤더가 지원됩니다. 기본 쿼리 문자열 매개변수 이름은 api-version이므로 생성자를 비워 둘 수 있지만, 다른 이름이 필요한 경우 제공해야 합니다. 쿼리 문자열 매개변수와 헤더에 다른 이름을 사용할 수도 있습니다. 또한 ReportApiVersions를 true로 설정하여 응답 헤더에 버전 정보를 반환한다는 점을 기억하세요. 아래 그림을 참조하세요.
이제 몇 가지 옵션을 더 살펴보겠습니다.
MapToApiVersion 매개변수 사용:
MapToApiVersion 속성을 사용하면 단일 API 작업을 모든 버전에 매핑할 수 있습니다. 즉, 여러 버전을 지원하는 단일 컨트롤러입니다. 컨트롤러에는 버전 3 지원 API 작업 메서드만 있을 수 있습니다. 이 경우 MapToApiVersion을 사용할 수 있습니다. 아래 코드를 살펴보세요.
위 코드의 의미는 공개 문자열 Get() 메서드는 버전 1.0에서만 지원되고, 공개 문자열 Getv3() 메서드는 버전 3.0에서만 지원된다는 것입니다.
사진과 실제 이미지가 있고 매우 유연하고 매우 마음에 듭니다.
Deprecated 매개변수 사용법:
여러 API 버전을 지원하는 경우 일부 버전은 결국 시간이 지남에 따라 더 이상 사용되지 않습니다. 하나 이상의 API 버전을 더 이상 사용되지 않음으로 표시하려면 컨트롤러를 더 이상 사용되지 않음으로 장식하면 됩니다. 이는 API 버전이 지원되지 않는다는 의미는 아닙니다. 여전히 해당 버전을 호출할 수 있습니다. 이는 호출하는 API 사용자에게 다음 버전이 향후 더 이상 사용되지 않을 것임을 알리는 방법일 뿐입니다.
위에서 더 이상 사용되지 않음을 TRUE로 설정하면 버전 1.0이 향후 더 이상 사용되지 않음을 의미합니다. API 인터페이스에 액세스하면 아래 그림과 같이 응답 헤더에서 다음 정보를 볼 수 있습니다.
ApiVersionNeutral 속성 사용:
ApiVersionNeutral 속성은 이 API가 더 이상 버전 제어를 지원하지 않음을 정의합니다. 이는 API 버전 관리를 지원하는지 여부 또는 API 버전 관리를 지원하지 않는 레거시 API에 관계없이 정확히 동일하게 작동하는 API에 유용합니다. 따라서 ApiVersionNeutral 속성을 추가하여 버전 제어를 종료할 수 있습니다.
버전 정보 가져오기
접속 중인 클라이언트 버전을 알고 싶다면 다음 코드를 통해 이 기능을 구현할 수 있습니다. 효율적인 방식으로 향상된 기능을 제공하는 동시에 변경 사항을 쉽게 추적할 수 있습니다. 이 문서에서는 ASP.NET coreWEB API에 여러 버전에 대한 지원을 추가하는 방법을 살펴보았습니다. nuget 패키지는 쿼리 문자열 매개변수를 통한 버전 관리를 지원하고 URL 및 헤더를 통해 경로 세그먼트를 추가합니다. 또한 버전 단일 API 작업과 버전을 선택 해제하는 기능도 제공합니다.
타사 패키지를 사용하지 않고도 API의 버전 제어를 구현할 수 있나요? 자세한 내용은 다루지 않겠습니다.
4. Ultimate 버전(NuGet 패키지 없음) asp.net 핵심 웹 API 버전 제어새 핵심 API 프로젝트 만들기:
VersionControl 폴더 아래에 IApplicationModelConvention 인터페이스를 구현하는 새 클래스 NameSpaceVersionRoutingConvention을 만듭니다. 코드는 다음과 같습니다. 코드를 디버깅하면 프로그램이 실행될 때만 실행된다는 것을 발견했습니다. 처음 실행되고 다시 실행되지 않으므로 매우 효율적입니다. 5. 요약: public class NameSpaceVersionRoutingConvention:IApplicationModelConvention
{
private readonly string apiPrefix;
private const string urlTemplate = "{0}/{1}/{2}";
public NameSpaceVersionRoutingConvention(string apiPrefix = "api")
{
this.apiPrefix = apiPrefix;
}
public void Apply(ApplicationModel application)
{
foreach (var controller in application.Controllers)
{
var hasRouteAttribute = controller.Selectors
.Any(x => x.AttributeRouteModel != null);
if (!hasRouteAttribute)
{
continue;
}
var nameSpaces = controller.ControllerType.Namespace.Split('.');
//获取namespace中版本号部分
var version = nameSpaces.FirstOrDefault(x => Regex.IsMatch(x, @"^v(\d+)$"));
if (string.IsNullOrEmpty(version))
{
continue;
}
string template = string.Format(urlTemplate, apiPrefix, version,
controller.ControllerName);
controller.Selectors[0].AttributeRouteModel = new AttributeRouteModel()
{
Template = template
};
}
}
}
위 내용은 ASP.Net Core의 여러 버전의 WebApi에 대한 자세한 비교(그림)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!