[Nest]Swagger APIの適用
緒論
2つのプロジェクトでGitbookを使用してAPIリストを管理します.最初からGitbookを書いて別のことを書こうとは思っていませんでしたが、プロジェクトをしている間に不便な点を感じたので、代替材料があるか探してみました.その後、Swager APIは自動化とテストをサポートして試用することにした.
私がGitbookしか使っていないときの欠点は、
Gibookの欠点
1.APIの詳細が変更されるたびに、Webページ上で1つずつ変更されます。
これは大きな欠点だと思います.GitbookはほとんどAPIの詳細を管理する手帳なので、設計段階の終了や作成時には非常に簡単ですが、プロジェクト中期にAPIを変更するのは面倒なことではありません.
もちろん,変更が起こらないように設計することが重要であるが,それでもAPIは様々な理由で随時変更される可能性がある.
2.無料バージョンは、作成者のみが変更できます。**
私たちはプロジェクトマネージャが作成したので、後で変更が発生するたびに.
各API担当者がタスクの中で整理した後、組長が再修正した...事が繰り返された.
企業で使うと有料バージョンを使う確率が高いのがTOYアイテムのような小さなアイテムの欠点かもしれません.
Swager APIの利点
では、スワーガーの長所は何でしょうか.Gitbookの欠点は正反対に補うことができる.
1.(半)自動化が可能。
完全に自動化されているのではなく、どのようなコード、タイプなのか、一つ一つ詳細を追加する必要があります.これは同じです.しかし,コードを記述する際には,自然に部分を追加することができ,Webページへの移動と比較できない程度に便利である.
2.APIテストが可能です。
以前はPostmanでAPIテストが必要でした.しかし,作成さえすれば,Swagger APIは文書中で容易にテストできる.
これらの利点を持つSwagger APIをNestJSに適用する方法について説明します.
SwaggerをNestJSに適用する
1.モジュールクローズ
まずnestで使用するためにはnpmでモジュールをダウンロードする必要がある.
// 일반적인 경우
npm install --save @nestjs/swagger swagger-ui express
//fastify를 사용하는 경우
npm install --save @nestjs/swagger fastify-swagger
2.優先パラメータ
そしてメインtsでは、以下のようにプリファレンスパラメータを設定します.
async function bootstrap() {
const app = await NestFactory.create(AppModule, {
cors: true,
});
// 여기부터 Swagger 설정 시작
const config = new DocumentBuilder()
.setTitle('Roadgram')
.setDescription('Roadgram API Document')
.setVersion('1.0')
.addTag('roadgram')
.build();
const document = SwaggerModule.createDocument(app, config);
// 첫 번째 변수는 url/변수의 형태로 URL 경로를 설정할 수 있다.
// ex) localhost:5000/api
SwaggerModule.setup('api', app, document, {
// swagger option 중 하나로, 기본적으로 보이는 Dto를 숨기는 option
swaggerOptions: {defaultModelsExpandDepth: -1}
});
// Swagger 설정 끝
app.useGlobalPipes(
new ValidationPipe({
whitelist: true,
forbidNonWhitelisted: true,
transform: true,
}),
);
app.use(cookieParser());
await app.listen(process.env.SERVER_PORT);
}
bootstrap();
サーバを設定して開き、URL(私が示すようにlocalhost:5000/api)に接続すると、以下のようにドキュメントが表示されます.3.記録API
レコーダーで記録してみましょう.
アクセサリーに関する情報は正式な書類で確認できます.
-タグの設定
ラベルはApiTagsで分類できます.
各メソッドは、コントローラ全体を同じラベルに組み合わせる場合は、一番上に宣言できます.
@Controller('articles')
@ApiTags('Articles')
export class ArticlesController {
constructor(
private articlesService: ArticlesService,
) {}
....
-APIの説明を追加
説明はsummary、descriptionオプションでApiOperationに追加できます.
@Get()
@ApiOperation({summary: "메인 페이지 팔로우 조회", description: "메인 페이지에서 팔로우한 사람의 게시물들을 조회한다."})
...
-入力値詳細の追加
DTOを使用する場合は、DTOの各変数にapiプロパティを指定します.
詳細を入力できます.
export class CreateArticleDto {
@ApiProperty({description: '유저ID'})
@IsNotEmpty()
@IsNumber()
user: number;
それ以外は使用していませんが、ApiQuery、ApiParamなどを使ってController部分に追加することもできます.-レスポンスの追加
各レスポンスコードには、apikResponse、apiNotFoundResponseなどから対応するコメントを追加できます.
@Get()
@ApiOperation({summary: "메인 페이지 팔로우 조회", description: "메인 페이지에서 팔로우한 사람의 게시물들을 조회한다."})
@ApiOkResponse({description: '팔로우 게시물을 정상적으로 조회함', type: GetMainResponse})
@ApiUnauthorizedResponse({description: '권한이 없음', type: GetMain401Response})
@ApiNotFoundResponse({description: '팔로잉 유저를 찾을 수 없음', type: GetMain404Response})
typeに対応する応答は独立した抽象クラスとして作成される.import { ApiProperty } from "@nestjs/swagger";
export abstract class ArticleObject {
@ApiProperty({example: 5})
id: number
@ApiProperty({example: 3})
userId: number
@ApiProperty({example: 'thumbnail.jpg'})
thumbnail: string
@ApiProperty({example: "테스트 계정"})
nickname: string
@ApiProperty({example: "profile.jpg"})
profileImage: string
@ApiProperty({example: 3})
totalLike: number
@ApiProperty({example: 5})
totalComment: number
@ApiProperty({example: {order: 1, tagName: "테스트"}})
tags: Object[] | []
};
export abstract class ArticlesData {
@ApiProperty()
articles: ArticleObject
};
export abstract class GetMainResponse {
@ApiProperty()
data: ArticlesData
@ApiProperty({example: "ok"})
message: string
}
export abstract class GetMain401Response {
@ApiProperty({example: 'permisson denied'})
message: string
}
export abstract class GetMain404Response {
@ApiProperty({example: 'not found following ids'})
message: string
}
完成物!私はすでにコード作成されたプロジェクトにSwaggerを適用しました.
次回は設計段階から実施します.
コードや変数を設定して適用するのは容易ではないようです.途中で交換すべきかもしれません.
それでもGitbookより便利なのは事実
実際の運用でSwagerを使うところはSwagerだけでAPIの内訳を管理するのか、Gitbookなどのツールを併用するのか.
にこにこ
Reference
Reference
この問題について([Nest]Swagger APIの適用), 我々は、より多くの情報をここで見つけました https://velog.io/@wngud4950/NestJS-Swagger-API-적용テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol