본문 바로가기

프로젝트/멋사 개인 프로젝트 (mutsa-SNS)

[25] mutsa-SNS-2 6일차 - (2) Swagger api 정보 추가

swagger api에 대한 정보를 추가해 보았다.

 

  • endpoint에 설명 추가
  • Api 이름과 설명 추가

 

Configuration

SwaggerConfig

@Configuration
@RequiredArgsConstructor
public class SwaggerConfig {

    private final TypeResolver typeResolver;

    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                //문서 설명
                .apiInfo(new ApiInfoBuilder()
                        .title("MutsaSNS Swagger")
                        .description("로그인, 포스트, 댓글, 좋아요, 알림 기능")
                        .version("1.0.0")
                        .build())
                //swagger pageable 설정
                .alternateTypeRules(AlternateTypeRules
                        .newRule(typeResolver.resolve(Pageable.class), typeResolver.resolve(Page.class)))
                .securityContexts(Arrays.asList(securityContext()))
                .securitySchemes(Arrays.asList(apiKey()))
                .select()
                .apis(RequestHandlerSelectors.any())
                .paths(PathSelectors.any())
                .build();
    }

    @Getter
    @Setter
    @ApiModel
    static class Page {
        @ApiModelProperty(value = "페이지 번호")
        private Integer page;
    }

    //Swagger authorization 추가
    private SecurityContext securityContext() {
        return SecurityContext.builder().securityReferences(defaultAuth()).build();
    }

    private List<SecurityReference> defaultAuth() {
        AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything");
        AuthorizationScope[] authorizationScopes = new AuthorizationScope[1];
        authorizationScopes[0] = authorizationScope;
        return Arrays.asList(new SecurityReference("Authorization", authorizationScopes));
    }

    private ApiKey apiKey() {
        return new ApiKey("Authorization", "Authorization", "header");
    }

}

apiInfo 부분에 title, discription, version 정보를 추가하였다.

 

Controller

ex) AlarmController

@RestController
@RequestMapping("/api/v1/alarms")
@RequiredArgsConstructor
public class AlarmController {

    private final AlarmService alarmService;

    @GetMapping
    @ApiOperation(value = "유저 알람 목록 조회")
    public Response<Page<AlarmDto>> getAlarm(@PageableDefault(size=20, sort="createdAt", direction = Sort.Direction.DESC) Pageable pageable,
                                             @ApiIgnore Authentication authentication) {
        Page<AlarmDto> alarmDtos = alarmService.getAlarm(pageable, authentication.getName());

        return Response.success(alarmDtos);
    }
}

@ApiOperation을 이용하여 endpoint마다 설명을 추가하였다.

 

swagger AlarmController 알람 조회 endpoint 설명 추가

원래는 해당 controller에서의 method의 이름이 출력되었는데, 지정한 value 값으로 변한다.

 

<EC2 배포 URL>

http://ec2-3-35-225-29.ap-northeast-2.compute.amazonaws.com:8080/swagger-ui/

 

<전체 Reference>

https://kim-jong-hyun.tistory.com/49

 

[Spring] - Swagger 기본사용법 및 API 문서자동화

Spring으로 Rest API를 개발하고 그 API에 대한 문서를 정리하여 해당 API를 사용하는 클라이언트 및 서버 개발자들에게 문서를 정리해서 공유해야하는데 이때 Swagger를 이용하게되면 이런 작업을 보

kim-jong-hyun.tistory.com

http://springfox.github.io/springfox/javadoc/2.6.0/index.html?springfox/documentation/service/ApiInfo.html 

 

Generated Documentation (Untitled)

 

springfox.github.io