728x90
API 문서화를 위해 Springdocs 도입
프론트엔드에 API 를 테스트해 볼 수 있는 화면을 제공
"Springfox"의 경우 2020년 이후 활동이 없는 상태라, Springdoc를 사용하였습니다.
의존성 추가
implementation 'org.springdoc:springdoc-openapi-ui:1.6.14'
application.yml 설정
springdoc:
api-docs:
path: /chat-api-docs
default-consumes-media-type: application/json
default-produces-media-type: application/json
swagger-ui:
operations-sorter: alpha
tags-sorter: alpha
# http://localhost:8080/swagger-ui/index.html
path: /swagger-ui.html
disable-swagger-default-url: true
doc-expansion: none
paths-to-match:
- /chatting/**
Config 클래스 작성
@Configuration
public class SwaggerConfig {
@Bean
public GroupedOpenApi publicApi(){
return GroupedOpenApi.builder()
.group("v1-plop")
.pathsToMatch("/chatting/**")
.build();
}
@Bean
public OpenAPI openAPI(){
String title = "Plop Chat-service API Docs";
String description = "Plop Messenger App REST API Document - Chat";
SecurityScheme securityScheme = new SecurityScheme()
.type(SecurityScheme.Type.HTTP).scheme("bearer").bearerFormat("JWT")
.in(SecurityScheme.In.HEADER).name("Authorization");
SecurityRequirement schemaRequirement = new SecurityRequirement().addList("bearerAuth");
return new OpenAPI()
.components(new Components().addSecuritySchemes("bearerAuth",securityScheme))
.security(Arrays.asList(schemaRequirement))
.info(new Info().title(title)
.description(description)
.version("v0.0.1"));
}
}
API 정보 - 메소드
예시)
@Tag(name="room", description = "채팅방 API")
@Slf4j
@RestController
@RequestMapping("/chatting/room")
@RequiredArgsConstructor
public class ChatRoomController {
@Operation(summary = "그룹 채팅방 생성", description = "그룹 채팅방 생성시 웹소켓으로 생성 정보 멤버들에게 전달", responses = {
@ApiResponse(responseCode = "201", description = "생성 성공", content = @Content(schema = @Schema(implementation = RespRoomDto.class))),
@ApiResponse(responseCode = "400", description = "초대한 상대방id가 없음", content = @Content(schema = @Schema(implementation = ErrorResponseDto.class))) })
@PostMapping("/v1/group-creation")
public ResponseEntity<RespRoomDto> groupCreation(@RequestHeader("Authorization") String jwt, @Valid @RequestBody ReqGroupDto reqGroupDto){
String userId = getTokenToUserId(jwt);
reqGroupDto.setCreator(userId);
RespRoomDto respRoomDto = chatRoomMongoService.createGroup(reqGroupDto);
producers.sendRoomMessage(RoomMessageDto.builder()
.receivers(reqGroupDto.getMembers())
.respRoomDto(respRoomDto)
.build());
return new ResponseEntity<>(respRoomDto,HttpStatus.CREATED);
}
API 정보 - 모델
@Schema(description = "1:1 방생성 요청")
@Setter
@Getter
public class ReqDmDto {
@Schema(description = "요청하는 유저 id")
private String creator;
@NotEmpty
@Schema(description = "요청받는 유저 id")
private String message_to;
}
@Schema 로 부가 설명
'Dev > [프로젝트] 2022 Winter Dev Camp' 카테고리의 다른 글
2022 스마일게이트 윈터데브캠프를 통해 성장하기 7 - 성능 측정, 성능 향상을 위한 리팩토링, 수정과 보완 (0) | 2023.03.05 |
---|---|
2022 스마일게이트 윈터데브캠프를 통해 성장하기 6 - 프로젝트 배포 (0) | 2023.03.04 |
2022 스마일게이트 윈터데브캠프를 통해 성장하기 5 - MongoDB 쿼리 자유롭게 사용하기 (0) | 2023.03.03 |
2022 스마일게이트 윈터데브캠프를 통해 성장하기 4 - 구현 : 접속상태 서비스 (0) | 2023.03.01 |
2022 스마일게이트 윈터데브캠프를 통해 성장하기 3 - 구현 : 채팅 서비스 (0) | 2023.02.28 |
댓글