NSwag에서 Build 를 사용할 경우 client 측 Swagger 가 자동으로 생성됩니다.
이 보도는 부지런한 커피이다
원두커피 추가 달력 Advent Calendar 2021,15일째 보도
이쪽 커뮤니티에서는 예전에 C#의 코딩 생성기였던 NSwag에 대한 소개가 있었거든요.
그 당시의 내용을 기사에 간략하게 쓰도록 하겠습니다.
NSwag 정보
C# 코드 생성기에서 API Controler의 내용을 기준으로
Swagger 코드를 자동으로 생성
사용할 라이브러리
NSwag에서는 디렉터 생성 OpenAPI에 대한 설명서를 볼 수 있습니다.
예를 들어 다음과 같은 Controller가 있는 경우
namespace NSwag_app.Controllers
{
[ApiController]
public class TestController : Controller
{
[HttpGet]
[Route("[controller]")]
public TestArray Test()
{
return new TestArray();
}
}
public class Test
{
public string test{ get; set; }
}
public class TestArray
{
public Test[] tests { get; set; }
}
}
다음 json 파일을 출력합니다 "/Test": {
"get": {
"tags": [
"Test"
],
"operationId": "Test_Test",
"responses": {
"200": {
"description": "",
"content": {
"application/json": {
"schema": {
"$ref": "#/components/schemas/TestArray"
}
}
}
}
}
}
},
NSwag에서 Swagger 자동 생성Swagger 생성 방법은 nswag 입니다.json으로 관리
프로젝트 설정은 여러 방면에 관련되어 있어서 하나하나 확인하기가 매우 어렵다
NSwag Studio GUI를 통해 설정할 수 있는 도구가 있으므로
여기서 설정하면 프로필을 내보내는 것이 빠르지 않습니까
TypeScripts를 통해 출력을 설정할 때
다음ts파일 내보내기
.ts
export class TestApiFactory {
private instance: AxiosInstance;
private baseUrl: string;
protected jsonParseReviver: ((key: string, value: any) => any) | undefined = undefined;
constructor(baseUrl?: string, instance?: AxiosInstance) {
this.instance = instance ? instance : axios.create();
this.baseUrl = baseUrl !== undefined && baseUrl !== null ? baseUrl : "";
}
test( cancelToken?: CancelToken | undefined): Promise<TestArray> {
let url_ = this.baseUrl + "/Test";
url_ = url_.replace(/[?&]$/, "");
let options_ = <AxiosRequestConfig>{
method: "GET",
url: url_,
headers: {
"Accept": "application/json"
},
cancelToken
};
return this.instance.request(options_).catch((_error: any) => {
if (isAxiosError(_error) && _error.response) {
return _error.response;
} else {
throw _error;
}
}).then((_response: AxiosResponse) => {
return this.processTest(_response);
});
}
protected processTest(response: AxiosResponse): Promise<TestArray> {
const status = response.status;
let _headers: any = {};
if (response.headers && typeof response.headers === "object") {
for (let k in response.headers) {
if (response.headers.hasOwnProperty(k)) {
_headers[k] = response.headers[k];
}
}
}
if (status === 200) {
const _responseText = response.data;
let result200: any = null;
let resultData200 = _responseText;
result200 = TestArray.fromJS(resultData200);
return result200;
} else if (status !== 200 && status !== 204) {
const _responseText = response.data;
return throwException("An unexpected server error occurred.", status, _responseText, _headers);
}
return Promise.resolve<TestArray>(<any>null);
}
}
또한 API의 매개변수 또는 반환 값이 모델로 정의된 경우모델도 같이 하고.
export interface ITest {
test?: string;
}
Build 때는 NSwag 뛰어야 돼요.NSwag MSBuild 설치 시 NSwag 실행
기본적으로 프로젝트 파일에서 다음과 같은 방식으로 쓰면 된다
프로젝트에 맞춰 Version을 교체하십시오.
<ItemGroup>
<PackageReference Include="Microsoft.AspNetCore.SpaServices.Extensions" Version="3.1.16" />
<PackageReference Include="NSwag.AspNetCore" Version="13.13.2" />
<PackageReference Include="NSwag.MSBuild" Version="13.13.2">
<PrivateAssets>all</PrivateAssets>
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
</PackageReference>
</ItemGroup>
끝맺다전면과 후면이 완전히 분리된 시스템이라면
API의 사양 변경은 플리온으로 수정할 수 없습니다.
가끔 버그가 발생하지만 유지보수를 수정해도 곤란합니다
NSwag 같은 코드 발생기를 사용하는 경우
Swagger를 자동으로 수정할 수 있으며 컴파일 오류로 인해 호출 부분의 오류를 알려 줍니다.
꼭 한번 써보는 게 좋지 않을까.
Reference
이 문제에 관하여(NSwag에서 Build 를 사용할 경우 client 측 Swagger 가 자동으로 생성됩니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kakumeikatakesi/items/f7adf36b86fadea5d898텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)