Net Core 의 Api 버 전 관리
.NET Core 는.NET Core 가 실 행 될 때 와.NET Core SDK 를 말 하 며 응용 프로그램 개발 에 필요 한 도 구 를 포함한다.NET Core SDK 는 이전 버 전의.NET Core 가 실 행 될 때 와 함께 사용 할 수 있다.
본 고 는 주로.Net Core Api 버 전 관리 에 관 한 내용 을 소개 하 였 으 며,다음은 더 이상 말 하지 않 겠 습 니 다.상세 한 소 개 를 살 펴 보 겠 습 니 다.
링크:API Versioning in .Net Core
저자:Neel Bhatt
간단 한 소개
Api 의 버 전 관리 란 Api 개발 에서 자주 발생 하 는 문제 로 대부분 중대 형 프로젝트 에서 Api 의 버 전 관리 에 사용 해 야 한다.
이 블 로그 에 서 는'Net Core Api 프로젝트 에서 Api 버 전 제 어 를 어떻게 사용 하 는 지 설명 한다.
이 블 로그 에서 테스트 프로젝트 의 개발 환경:
Api 프로젝트 만 들 기
우선.NET Core Api 프로젝트 를 만 듭 니 다.
Nuget 으로 Api 버 전 관리 라 이브 러 리 설치 하기
.NET Core Mvc 에서 마이크로소프트 는 공식 적 으로 사용 가능 한 Api 버 전 제어 라 이브 러 리 Microsoft.AspNetCore.Mvc.Versioning 을 제공 했다.여기 서 우 리 는 Nuget 을 사용 하여 이 가방 을 설치 할 수 있다.
PM> Install-Package Microsoft.AspNetCore.Mvc.Versioning
Startup 클래스 수정
Microsoft.AspNetCore.Mvc.Versioning 라 이브 러 리 설치 가 완료 되면 다음 단계 에 Api 버 전 관리 서 비 스 를 추가 합 니 다.
여기에 Startup 류 의 Configure Service 방법 에 다음 코드 를 추가 해 야 합 니 다.
services.AddApiVersioning(o => {
o.ReportApiVersions = true;
o.AssumeDefaultVersionWhenUnspecified = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
});
코드 해석ReportApiVersion 속성 은 불 형식 입 니 다.true 로 설정 하면 Api 가 요청 한 응답 헤더 에 현재 Api 가 지원 하 는 버 전,예 를 추가 합 니 다.
Response Header
api-supported-versions: 1.0
content-type: application/json; charset=utf-8
date: Sat, 06 Oct 2018 05:24:21 GMT
server: Kestrel
status: 200
x-powered-by: ASP.NET
AssumeDefaultVersionWhenUnspecified 속성 은 클 라 이언 트 가 버 전 번 호 를 지정 하지 않 았 을 때 기본 버 전 번 호 를 사용 할 지 여 부 를 표시 하기 위 한 것 입 니 다.DefaultApiVersion 속성 은 기본 버 전 번호 입 니 다.
다 중 버 전 만 들 기 Api
Net Core Mvc 의 Api 버 전 제어 라 이브 러 리 를 테스트 하기 위해 다음 두 개의 Controller 를 만 듭 니 다.
[ApiVersion("1.0")]
[Route("api/values")]
[ApiController]
public class ValuesV1Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "Value1 from Version 1", "value2 from Version 1" };
}
}
[ApiVersion("2.0")]
[Route("api/values")]
[ApiController]
public class ValuesV2Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1 from Version 2", "value2 from Version 2" };
}
}
코드 해석-Value1 controller 와 Value2 controller 는 같은 방법 으로 서명 하 는 Get 방법 을 가지 고 있 으 며,단지 2 개의 Get 에서 다른 문자열
현재 프로젝트 를 시작 하면 다음 과 같은 결 과 를 얻 을 수 있 습 니 다.Api 버 전 번 호 를 지정 하지 않 았 을 때 프로젝트 는 1.0 버 전의 Api,즉 ValuesV1controller 의 Get 방법 을 자동 으로 사용 합 니 다.
검색 문자열(Query String)에서 버 전 관리 사용 방법
Microsoft.AspNetCore.Mvc.Versioning 은 QueryString 형식 으로 Api 를 요청 하 는 버 전 번 호 를 지정 할 수 있 습 니 다.개발 자 는 Url 에서 api-version 인 자 를 지정 하여 호출 된 Api 버 전 번 호 를 선택 할 수 있 습 니 다.
현재 항목 을 예 로 들다
요구 하 다https://localhost:44319/api/values?api-version=2.0 시 결 과 를 되 돌려 줍 니 다.
["value1 from Version 2","value2 from Version 2"]
요구 하 다https://localhost:44319/api/values?api-version=1.0 시 결 과 를 되 돌려 줍 니 다.
["Value1 from Version 1","value2 from Version 1"]
요청 한 Api 버 전 을 루트 제약 조건 에서 지정 하 는 방법Microsoft.AspNetCore.Mvc.Versioning 은 Api 를 요청 하 는 버 전 번 호 를 제약 조건 으로 사용 하 는 것 도 지원 합 니 다.
예:[루트("api/{v:apiVersion}/값")]
우 리 는 이전 두 개의 Controller 코드 를 다음 과 같이 수정 합 니 다.
[ApiVersion("1.0")]
[Route("api/{v:apiVersion}/values")]
[ApiController]
public class ValuesV1Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "Value1 from Version 1", "value2 from Version 1" };
}
}
[ApiVersion("2.0")]
[Route("api/{v:apiVersion}/values")]
[ApiController]
public class ValuesV2Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "value1 from Version 2", "value2 from Version 2" };
}
}
현재 우 리 는 다음 두 개의 Url 을 통 해 Api 를 요청 합 니 다.돌아 온 결 과 는 다음 과 같 습 니 다./api/2.0/values
["value1 from Version 2","value2 from Version 2"]
/api/1.0/values
["Value1 from Version 1","value2 from Version 1"]
요청 헤더(HTTP Header)에서 버 전 제 어 를 사용 하 는 방법위의 두 가지 방식 은 요청 한 Url 을 수정 해 야 합 니 다.이 두 가지 방식 이 마음 에 들 지 않 으 면 Microsoft.AspNetCore.Mvc.Versioning 은 세 번 째 로 Api 버 전 번 호 를 지정 하 는 방식 도 제공 합 니 다.즉,HTTP 요청 헤더 에 버 전 번 호 를 추가 하 는 것 입 니 다.
이러한 방식 을 사용 하기 위해 서 는 먼저 Startup.cs 에서 Microsoft.AspNetCore.Mvc.Versioning 의 설정 을 수정 해 야 합 니 다.코드 는 다음 과 같 습 니 다.
services.AddApiVersioning(o =>
{
o.ReportApiVersions = true;
o.AssumeDefaultVersionWhenUnspecified = true;
o.DefaultApiVersion = new ApiVersion(1, 0);
o.ApiVersionReader = new HeaderApiVersionReader("x-api-version");
});
ApiVersionReader 속성 을 통 해 Api 버 전 번 호 를 지정 합 니 다.요청 한 머리의 x-api-version 속성 에서 나 온 것 입 니 다.Tips:
o.ApiVersionReader = new HeaderApiVersionReader("x-api-version");
를 사용 하면 검색 문자열 에서 버 전 번 호 를 지정 하 는 방식 을 사용 할 수 없습니다.두 가지 방식 을 동시에 지원 하고 싶다 면o.ApiVersionReader = ApiVersionReader.Combine(new QueryStringApiVersionReader(), new HeaderApiVersionReader() { HeaderNames = { "x-api-version" }});
(seamaswang 의 수정 에 감 사 드 립 니 다)다음은 Postman 을 통 해 2.0 의 Api 를 요청 한 결과 올 바 르 게 돌 아 왔 습 니 다.
다른 기능 은 Api(Deprecated)기능 을 버 립 니 다.
때때로,우 리 는 오래된 Api 를 버 려 진 상태 로 표시 해 야 하지만,이 버 전의 Api 를 완전히 제거 하 는 것 을 원 하지 않 습 니 다.우 리 는 Deprecated 기능 을 사용 할 수 있 습 니 다.
예:우 리 는 현재 ValuesV1controler 를 버 리 고 싶 습 니 다.Deprecated 특성의 값 을 true 로 지정 할 수 있 습 니 다.
[ApiVersion("1.0", Deprecated = true)]
[Route("api/values")]
[ApiController]
public class ValuesV1Controller : ControllerBase
{
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] { "Value1 from Version 1", "value2 from Version 1" };
}
}
이 api 를 요청 할 때 응답 헤더 에 api-deprecated-versions 와 api-supported-versions 2 개의 속성 이 나타 납 니 다.
Response Header
api-deprecated-versions: 1.0
api-supported-versions: 2.0
content-type: application/json; charset=utf-8
date: Sat, 06 Oct 2018 06:32:18 GMT
server: Kestrel
status: 200
x-powered-by: ASP.NET
이 응답 은 1.0 버 전의 Api 가 만 료 되 었 고 2.0 버 전에 같은 Api 가 있어 2.0 버 전의 Api 로 바 꿀 수 있다 는 뜻 이다.ApiVersionneytral 을 사용 하여 버 전 관리 가 필요 없 는 Api 를 지정 합 니 다.
Api 를 작성 할 때 아주 간단 한 Api 에 대해 서 는 건강 검진 Api 와 같은 Api 버 전 번 호 를 지정 할 필요 가 없 을 수도 있 습 니 다.Api 버 전 관리 에서 Api Versionneytral 기능 을 제거 할 수 있 습 니 다.
예:
[ApiVersionNeutral]
[Route("api/[controller]")]
[ApiController]
public class HealthCheckController : ControllerBase
{
public string Get()
{
return "Good";
}
}
원본 코드 ( 로 컬 다운로드 )총결산
이상 은 이 글 의 전체 내용 입 니 다.본 논문 의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가치 가 있 기 를 바 랍 니 다.궁금 한 점 이 있 으 시 면 댓 글 을 남 겨 주 셔 서 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Tailwind를 ASP.NET Core 프로젝트에 통합우리는 을 사용합니다. 에서 코드를 찾을 수 있습니다. 면도기 페이지 구조를 추가합니다. "node_modules"가 설치되었습니다. "tailwind.config.js"파일이 생성되었습니다. 모든 .razor 및 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.