Search

Springdoc OpenApi

Springdoc OpenApi

Spring μ• ν”Œλ¦¬μΌ€μ΄μ…˜μ„ μœ„ν•œ OpenAPI 3.0 λ¬Έμ„œλ₯Ό μžλ™ μƒμ„±ν•˜λŠ” 라이브러리 REST API 의 API λ¬Έμ„œλ₯Ό μžλ™ν™” ν•΄μ£ΌλŠ” λ„κ΅¬μž…λ‹ˆλ‹€.

API 개발 λ¬Έμ„œν™” 도ꡬ

API 개발 λ¬Έμ„œν™” λ„κ΅¬λŠ” API μ—”λ“œν¬μΈνŠΈ, μš”μ²­, 응닡 및 κ΄€λ ¨ 정보λ₯Ό λ¬Έμ„œν™”ν•˜μ—¬ κ°œλ°œμžλ“€μ—κ²Œ API μ‚¬μš© 방법을 μ œκ³΅ν•˜λŠ” μ†Œν”„νŠΈμ›¨μ–΄ λ„κ΅¬μž…λ‹ˆλ‹€.

μ’…λ₯˜

β€’
Swagger

Swagger (OpenAPI)

REST APIλ₯Ό 섀계, ꡬ좕, λ¬Έμ„œν™” 및 μ‚¬μš©ν•˜λŠ” 데 도움이 될 수 μžˆλŠ” OpenAPI 사양을 기반으둜 κ΅¬μΆ•λœ μ˜€ν”ˆ μ†ŒμŠ€ 도ꡬ μ„ΈνŠΈμž…λ‹ˆλ‹€. https://swagger.io/docs/specification/about/
β€’
API 섀계, λΉŒλ“œ, λ¬Έμ„œν™” 및 ν…ŒμŠ€νŠΈλ₯Ό μœ„ν•œ 톡합 툴.
β€’
OpenAPI ν‘œμ€€μ„ μ€€μˆ˜ν•˜λ©°, RESTful APIλ₯Ό μ‰½κ²Œ λ””μžμΈν•˜κ³  관리할 수 있음.

SpringDoc OpenAPI Starter WebMVC UI

// Springdoc openapi implementation 'org.springdoc:springdoc-openapi-starter-webmvc-ui:2.7.0'
SQL
볡사

SwaggerConfig.java

import org.springdoc.core.models.GroupedOpenApi; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import io.swagger.v3.oas.models.OpenAPI; import io.swagger.v3.oas.models.info.Info; @Configuration public class SwaggerConfig { @Bean public GroupedOpenApi publicApi() { return GroupedOpenApi.builder() .group("aloha") // κ·Έλ£Ήλͺ… μ„€μ • .pathsToMatch("/**") // 경둜 μ„€μ • .build(); } @Bean public OpenAPI springShopOpenAPI() { return new OpenAPI() .info(new Info().title("Test Proejct API") .description("Test ν”„λ‘œμ νŠΈ API μž…λ‹ˆλ‹€.") .version("v0.0.1")); } }
Java
볡사

SpringDoc OpenAPI μ£Όμš” μ–΄λ…Έν…Œμ΄μ…˜

μ–΄λ…Έν…Œμ΄μ…˜
μ„€λͺ…
@Operation
API의 μž‘μ—…(λ©”μ„œλ“œ) μˆ˜μ€€μ—μ„œ 좔가적인 정보λ₯Ό μ œκ³΅ν•˜λŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. HTTP λ©”μ„œλ“œμ— λŒ€ν•œ μ„€λͺ…을 μ œκ³΅ν•˜κ³ , λ¬Έμ„œν™”λ˜λŠ” μ—”λ“œν¬μΈνŠΈμ— λŒ€ν•œ μΆ”κ°€ μ„€λͺ…을 달 수 μžˆμŠ΅λ‹ˆλ‹€.
@ApiResponse
νŠΉμ • HTTP 응닡 μ½”λ“œμ— λŒ€ν•œ μ„€λͺ…을 μ œκ³΅ν•©λ‹ˆλ‹€. @ApiResponses와 ν•¨κ»˜ μ‚¬μš©λ˜λ©°, 각 응닡 μ½”λ“œμ— λŒ€ν•œ μ„€λͺ…, λ°˜ν™˜ νƒ€μž… 등을 μ„€μ •ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: @ApiResponse(responseCode = "200", description = "OK")
@Schema
λͺ¨λΈ 클래슀의 ν•„λ“œμ— λŒ€ν•œ 메타데이터λ₯Ό μ œκ³΅ν•˜μ—¬ OpenAPI μŠ€νŽ™μ— λ§žλŠ” λ¬Έμ„œλ₯Ό 생성할 수 있게 ν•΄μ€λ‹ˆλ‹€. ν•„λ“œ 이름, νƒ€μž…, μ„€λͺ… 등을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: @Schema(description = "User ID") private String id;
@Tag
API μ—”λ“œν¬μΈνŠΈλ₯Ό νƒœκ·Έλ‘œ κ·Έλ£Ήν™”ν•˜μ—¬ λ¬Έμ„œμ—μ„œ κ΄€λ ¨λœ μ—”λ“œν¬μΈνŠΈλ₯Ό 묢을 수 있게 ν•΄μ£ΌλŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€.
μ˜ˆμ‹œ: @Tag(name = "User", description = "Operations related to user")
@RequestBody
μš”μ²­ 본문에 λŒ€ν•œ 메타데이터λ₯Ό λ¬Έμ„œν™”ν•˜λŠ” 데 μ‚¬μš©λ©λ‹ˆλ‹€. API의 μš”μ²­ 본문에 λŒ€ν•œ μ„€λͺ…을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: @RequestBody(description = "User object that needs to be added")
@RequestParam
쿼리 νŒŒλΌλ―Έν„°μ— λŒ€ν•œ 메타데이터λ₯Ό λ¬Έμ„œν™”ν•©λ‹ˆλ‹€. νŒŒλΌλ―Έν„°μ˜ μ„€λͺ…, ν•„μˆ˜ μ—¬λΆ€ 등을 μ •μ˜ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: @RequestParam(description = "User ID", required = true)
@PathVariable
경둜 λ³€μˆ˜μ— λŒ€ν•œ 메타데이터λ₯Ό λ¬Έμ„œν™”ν•©λ‹ˆλ‹€. API κ²½λ‘œμ—μ„œ λ³€μˆ˜λ‘œ μ‚¬μš©λ˜λŠ” 값에 λŒ€ν•œ μ„€λͺ…을 μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: @PathVariable(description = "ID of the user")
@Deprecated
APIκ°€ 더 이상 μ‚¬μš©λ˜μ§€ μ•ŠμŒμ„ λ‚˜νƒ€λ‚΄λŠ” μ–΄λ…Έν…Œμ΄μ…˜μž…λ‹ˆλ‹€. API λ¬Έμ„œμ— "Deprecated" λ©”μ‹œμ§€λ₯Ό μžλ™μœΌλ‘œ μΆ”κ°€ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: @Deprecated @Operation(description = "This endpoint is deprecated and will be removed in the future")
@Hidden
OpenAPI λ¬Έμ„œμ—μ„œ ν•΄λ‹Ή μ—”λ“œν¬μΈνŠΈλ₯Ό 숨기고 싢을 λ•Œ μ‚¬μš©ν•©λ‹ˆλ‹€. ν•΄λ‹Ή APIκ°€ λ¬Έμ„œμ— ν‘œμ‹œλ˜μ§€ μ•Šκ²Œ ν•  수 μžˆμŠ΅λ‹ˆλ‹€.
μ˜ˆμ‹œ: @Hidden