OpenAPI 어노테이션
REST API 문서 자동화를 위한 OpenAPI 어노테이션에 대해 살펴봅니다.
Spring에서의 OpenAPI 어노테이션은 주로 Springdoc OpenAPI 라이브러리를 사용하여 API 문서를 자동으로 생성할 때 사용되며, API 문서화할 때 큰 역할을 합니다. 이번 포스트에서는 OpenAPI의 주요 어노테이션에 대해 살펴보겠습니다.
@Operation
@Operation은 특정 엔드포인트에 대한 정보를 정의합니다.
-
속성
속성 설명 summary 엔드포인트에 대한 요약 설명 description 엔드포인트에 대한 자세한 설명 tags 태그를 사용하여 엔드포인트를 그룹화 responses 가능한 응답을 정의 parameters 엔드포인트의 파라미터를 정의 requestBody 요청 본문을 정의 deprecated 엔드포인트가 더 이상 사용되지 않음을 표시 -
예제 코드
@Operation(summary = "Get user by ID", description = "Returns a user when a valid ID is provided") @GetMapping("/users/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { // Implementation here }
@Parameter
@Parameter는 API 메서드의 파라미터를 설명합니다.
-
속성
속성 설명 name 파라미터 이름 description 파라미터에 대한 설명 required 파라미터의 필수 여부 example 파라미터의 예제 값 schema 파라미터의 스키마를 정의 -
예제 코드
@GetMapping("/users/{id}") public ResponseEntity<User> getUserById( @Parameter(description = "ID of the user to be obtained", required = true) @PathVariable Long id) { // Implementation here }
@RequestBody
@RequestBody는 요청 본문을 설명합니다.
-
속성
속성 설명 description 요청 본문에 대한 설명 required 요청 본문의 필수 여부 content 요청 본문의 내용을 정의 (미디어 타입과 스키마) -
예제 코드
@Operation(summary = "Create a new user") @PostMapping("/users") public ResponseEntity<User> createUser( @RequestBody(description = "User to be created", required = true, content = @Content(schema = @Schema(implementation = User.class))) @Valid @RequestBody User user) { // Implementation here }
@ApiResponses
@ApiResponses는 여러 @ApiResponse 어노테이션을 그룹화합니다.
-
속성
속성 설명 value `@ApiResponse` 어노테이션 배열 -
예제 코드
@ApiResponses(value = { @ApiResponse(responseCode = "200", description = "Successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class))), @ApiResponse(responseCode = "404", description = "User not found") }) @GetMapping("/users/{id}") public ResponseEntity<User> getUserById(@PathVariable Long id) { // Implementation here }
@ApiResponse
@ApiResponse는 가능한 응답을 설명합니다.
-
속성
속성 설명 responseCode 응답 코드 (예: 200, 404) description 응답에 대한 설명 content 응답 본문의 내용을 정의 (미디어 타입과 스키마) -
예제 코드
@ApiResponse(responseCode = "200", description = "Successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class))) @ApiResponse(responseCode = "404", description = "User not found")
@Schema
@Schema는 모델 클래스 또는 필드의 스키마를 정의합니다.
-
속성
속성 설명 description 필드 또는 클래스에 대한 설명 example 필드 또는 클래스의 예제 값 required 필드의 필수 여부 (클래스 레벨에서 사용) -
예제 코드
@Schema(description = "User entity") public class User { @Schema(description = "Unique identifier of the user", example = "1", required = true) private Long id; @Schema(description = "Name of the user", example = "John Doe", required = true) private String name; // Other fields, getters, and setters }
@Content
@Content는 요청 또는 응답 본문의 내용을 정의합니다.
-
속성
속성 설명 mediaType 미디어 타입 (예: "application/json") schema 스키마를 정의 examples 예제 값을 정의 -
예제 코드
@ApiResponse(responseCode = "200", description = "Successful operation", content = @Content(mediaType = "application/json", schema = @Schema(implementation = User.class)))
@ExampleObject
@ExampleObject는 예제 객체를 정의합니다.
-
속성
속성 설명 name 예제 이름 summary 예제 요약 description 예제에 대한 설명 value 예제 값 -
예제 코드
@Schema(description = "User entity") public class User { @Schema(description = "Unique identifier of the user", example = "1", required = true) private Long id; @Schema(description = "Name of the user", example = "John Doe", required = true) private String name; @Schema(description = "User email", example = "john.doe@example.com") private String email; // Other fields, getters, and setters }
@ArraySchema
@ArraySchema는 배열 타입의 스키마를 정의합니다.
-
속성
속성 설명 schema 배열의 요소 스키마를 정의 maxItems 배열의 최대 아이템 수 minItems 배열의 최소 아이템 수 uniqueItems 배열의 아이템 고유 여부 -
예제 코드
@ArraySchema(schema = @Schema(implementation = User.class)) private List<User> users;