Swagger 3.0 - 2

๋ชฝ๋ฃจ๋ฌธยท2024๋…„ 1์›” 12์ผ
0

Swagger

๋ชฉ๋ก ๋ณด๊ธฐ
2/2
post-thumbnail

๐Ÿ“ Swagger 3.0

์ €๋ฒˆ์— Swagger์˜ ์ดˆ๊ธฐ์„ค์ •์— ๋Œ€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด์•˜๋Š”๋ฐ, ์ด๋ฒˆ์—๋Š” ์‹ค์ œ๋กœ ์‚ฌ์šฉํ•˜๋Š” Anntation์— ๊ด€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด๋ ค๊ณ  ํ•œ๋‹ค.




๐Ÿšฉ @Tag

โ€ป Source Example

@Tag(name = "Template", description = "Template Description")
public interface ITemplateController {
}

โ–  name

  • Tag์˜ ์ด๋ฆ„์„ ํ‘œ์‹œํ•œ๋‹ค.
  • Tag์— ์„ค์ •๋œ Name์ด ๊ฐ™์€ ๊ฒƒ๋ผ๋ฆฌ ํ•˜๋‚˜์˜ API ๊ทธ๋ฃน์œผ๋กœ ๋ฌถ๋Š”๋‹ค.

โ–  desciption

  • Tag์— ๋Œ€ํ•œ ์„ค๋ช…์„ ํ‘œ์‹œํ•œ๋‹ค.

Example Image
Example Image

๐Ÿšฉ @Operation

โ€ป Source Example

public interface ITemplateController {
    @Operation(summary = "Get Request Template", description = "HttpMethod.Get Method ๋ฅผ ์ด์šฉํ•œ HTTP Request / ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ")
    ResponseEntity<ResponsePayload> httpMethodGet(@ModelAttribute GetMethodRequestPayload payload);

โ–  summary

  • API์— ๊ด€ํ•œ ๊ฐ„๋žตํ•œ ์„ค๋ช…์„ ํ‘œ์‹œํ•œ๋‹ค.

โ–  desciption

  • API์˜ ์ƒ์„ธํ•œ ์„ค๋ช…์„ ํ‘œ์‹œํ•œ๋‹ค.

Example Image
Example Image

๐Ÿšฉ @ParameterObject

  • RequestBody๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ์„ ์–ธํ•ด์ฃผ๋Š” Anntation์ด๋‹ค. ๋”ฐ๋ผ์„œ Swagger Web Page์— ํ•ด๋‹น Operation์—์„œ RequestBody ๋ถ€๋ถ„์ด ์ƒ๋žต๋œ๋‹ค.

โ€ป Source Example

public interface ITemplateController {
    @Operation(summary = "Get Request Template", description = "HttpMethod.Get Method ๋ฅผ ์ด์šฉํ•œ HTTP Request / ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ")
    ResponseEntity<ResponsePayload> httpMethodGet(@ParameterObject @ModelAttribute GetMethodRequestPayload payload);

Example Image

๐Ÿšฉ @Parameters

  • Parameter Annotation์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์„ ์–ธ์  Annotation์ด๋‹ค.

โ€ป Source Example

public interface ITemplateController {
    @Operation(summary = "Get Request Template", description = "HttpMethod.Get Method ๋ฅผ ์ด์šฉํ•œ HTTP Request / ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ")
    @Parameters({
            @Parameter(name = "userId", description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” String Parameter"),
            @Parameter(name = "name", description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” String Parameter"),
            @Parameter(name = "age", description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” Integer Parameter")
    })
    ResponseEntity<ResponsePayload> httpMethodGet(@ModelAttribute GetMethodRequestPayload payload);

๐Ÿšฉ @Parameter

โ€ป Source Example

public interface ITemplateController {
    @Operation(summary = "Get Request Template", description = "HttpMethod.Get Method ๋ฅผ ์ด์šฉํ•œ HTTP Request / ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ")
    @Parameters({
            @Parameter(name = "userId", description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” String Parameter"),
            @Parameter(name = "name", description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” String Parameter"),
            @Parameter(name = "age", description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” Integer Parameter")
    })
    ResponseEntity<ResponsePayload> httpMethodGet(@ModelAttribute GetMethodRequestPayload payload);

โ–  name

  • Parameter ์ด๋ฆ„์„ ํ‘œ์‹œํ•œ๋‹ค.

โ–  description

  • Parameter์˜ ์„ค๋ช…์„ ํ‘œ์‹œํ•œ๋‹ค.
  • Parameter์˜ ๊ธฐ๋ณธ์ ์ธ ์œ„์น˜๋ฅผ ์„ค์ •ํ•œ๋‹ค.

Example Image

๐Ÿšฉ @ApiResponses

  • ApiResponse Annotation์„ ์‚ฌ์šฉํ•˜๊ธฐ ์œ„ํ•œ ์„ ์–ธ์  Annotation์ด๋‹ค.

โ€ป Source Example

@Operation(summary = "Get Request Template", description = "HttpMethod.Get Method ๋ฅผ ์ด์šฉํ•œ HTTP Request / ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "success", content = @Content(schema = @Schema(implementation = GetMethodResponsePayload.class))),
            @ApiResponse(responseCode = "400", description = "bad request", content = @Content(schema = @Schema(implementation = ResponsePayload.class)))
    })
    ResponseEntity<ResponsePayload> httpMethodGet(@ParameterObject @ModelAttribute @Validated GetMethodRequestPayload payload, BindingResult error) throws CustomRunTimeException;

๐Ÿšฉ @ApiResponse

โ€ป Source Example

@Operation(summary = "Get Request Template", description = "HttpMethod.Get Method ๋ฅผ ์ด์šฉํ•œ HTTP Request / ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "success", content = @Content(schema = @Schema(implementation = GetMethodResponsePayload.class))),
            @ApiResponse(responseCode = "400", description = "bad request", content = @Content(schema = @Schema(implementation = ResponsePayload.class)))
    })
    ResponseEntity<ResponsePayload> httpMethodGet(@ParameterObject @ModelAttribute @Validated GetMethodRequestPayload payload, BindingResult error) throws CustomRunTimeException;

โ–  responseCode

  • ๋ฐ˜ํ™˜ํ•ด์ค„ ReseponseCode๋ฅผ ํ‘œ์‹œํ•œ๋‹ค.

โ–  description

  • ๋ฐ˜ํ™˜ํ•ด์ค„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํ‘œ์‹œ๋œ๋‹ค.

โ–  content

  • ๋ฐ˜ํ™˜ํ•ด์ค„ ๊ฐ์ฒด์— ๋Œ€ํ•œ ํƒ€์ž…์ด ์ •์˜๋œ๋‹ค.

Example Image

๐Ÿšฉ @Content

โ€ป Source Example

@Operation(summary = "Get Request Template", description = "HttpMethod.Get Method ๋ฅผ ์ด์šฉํ•œ HTTP Request / ๋‹จ์ˆœ ๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์ฃผ๋กœ ์‚ฌ์šฉ")
    @ApiResponses(value = {
            @ApiResponse(responseCode = "200", description = "success", content = @Content(schema = @Schema(implementation = GetMethodResponsePayload.class))),
            @ApiResponse(responseCode = "400", description = "bad request", content = @Content(schema = @Schema(implementation = ResponsePayload.class)))
    })
    ResponseEntity<ResponsePayload> httpMethodGet(@ParameterObject @ModelAttribute @Validated GetMethodRequestPayload payload, BindingResult error) throws CustomRunTimeException;

โ–  hidden ( true, false )

  • Schema ์ˆจ๊น€ ์—ฌ๋ถ€๋ฅผ ์„ค์ •ํ•œ๋‹ค.

โ–  implementation

  • Schema ๋Œ€์ƒ ํด๋ž˜์Šค๋ฅผ ์„ค์ •ํ•œ๋‹ค.
  • ํ•˜๋‹จ์˜ ์ง์ ‘์ ์ธ @Schema Anntation๊ณผ๋Š” ๊ฐ™์€ Annotation์ด๋‹ค.

๐Ÿšฉ @Schema

โ€ป Source Example

public class PostMethodRequestPayload extends RequestPayload {
    @NotBlank
    @Schema(description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” String Parameter / NotBlank", defaultValue = "userId")
    private String userId;

    @NotEmpty
    @Schema(description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” String Parameter / NotEmpty", defaultValue = "userName")
    private String name;

    @NotNull
    @Schema(description = "๋ฐ์ดํ„ฐ ์กฐํšŒ์— ์‚ฌ์šฉ๋˜๋Š” Integer Parameter / NotNull", defaultValue = "20")
    private int age;
}

โ–  desciption

  • Schema์— ๋Œ€ํ•œ ์„ค๋ช…์ด ํ‘œ์‹œ๋œ๋‹ค.

โ–  defaultValue

  • ๊ธฐ๋ณธ์ ์œผ๋กœ ์„ค์ •๋˜๋Š” ๊ฐ’์ด ํ‘œ์‹œ๋œ๋‹ค.

โ–  allowableValues

  • ๊ฐ€๋Šฅํ•œ ๊ฐ’๋“ค์„ ํ‘œ์‹œํ•ด์ฃผ๋Š” ๊ธฐ๋Šฅ์ด๋‹ค.

Example Image





๐Ÿ“Œ ๋งˆ๋ฌด๋ฆฌ

๊ธฐ๋ณธ์ ์œผ๋กœ ๋‚ด๊ฐ€ ์‹ค๋ฌด์—์„œ ์‚ฌ์šฉํ•˜๋˜ Swagger Anntation์— ๊ด€ํ•ด์„œ ์ •๋ฆฌํ•ด๋ณด์•˜๋‹ค.
์ด์ •๋„๋งŒ ์•Œ๊ณ ์žˆ์–ด์„œ ๊ฐœ๋ฐœ์ž๋“ค๊ฐ„์˜ API ๋ฌธ์„œ๋กœ ๋ถ„์Ÿ์ด ์ƒ๊ธธ๋งŒํ•œ ์ผ์€ ์—†๋Š”๊ฑฐ ๊ฐ™๋‹ค.
๋‚˜์ค‘์— ์‹œ๊ฐ„์ด ๋œ๋‹ค๋ฉด ๋” ์„ธ์„ธํ•œ ๊ธฐ๋Šฅ์„ ์ •๋ฆฌํ•˜์—ฌ ์—…๋กœ๋“œ ํ•˜๋ ค๊ณ  ํ•œ๋‹ค.

profile
์•Œ๊ณ  ์žˆ๋Š” ๊ฒƒ์„ ์ •๋ฆฌํ•˜๊ณ , ์ƒˆ๋กœ์šด ๊ฒƒ์„ ์•Œ๊ธฐ์œ„ํ•ด ๋„์ ์ด๋Š”๊ณณ..

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด