Swagger

- Swagger는 API 문서화와 API 개발을 지원하기 위한 오픈 소스 프레임워크이다. Swagger를 사용하면 API를 쉽게 문서화하고 시각적으로 표현할 수 있으며, 클라이언트 개발자들이 API를 쉽게 이해하고 테스트할 수 있다.

 

주요 기능

  • API 문서화 :  API 엔드포인트, 매개변수, 요청 및 응답 형식, 인증 등 API에 대한 자세한 문서를 작성할 수 있다.
  • 자동화된 문서 생성 :  소스 코드에 주석을 추가하여 API에 대한 문서를 자동으로 생성할 수 있다. 이를 통해 개발자는 API 변경 시 문서를 일일이 업데이트할 필요 없이 최신 정보를 유지할 수 있다.
  • 시각화된 API UI :  Swagger UI를 통해 API를 시각적으로 표현한다. Swagger UI는 사용자가 API를 쉽게 테스트하고 결과를 확인할 수 있는 인터페이스를 제공한다. 개발자들은 Swagger UI를 통해 API 엔드포인트를 호출하고 요청 및 응답을 확인할 수 있다.
  • API 테스트 :  Swagger UI를 통해 사용자는 API를 직접 테스트할 수 있다. API에 대한 입력 필드를 제공하고, 사용자가 필요한 매개변수를 설정하고 요청을 보낼 수 있다. 그리고 응답 결과를 확인할 수 있다.
  • 클라이언트 코드 생성 :  API 정의를 기반으로 클라이언트 코드를 자동으로 생성할 수 있다. 이를 통해 클라이언트 개발자는 API를 더 쉽게 호출하고 사용할 수 있다.

 

평소 Postman을 주로 사용해왔지만, 이번 팀 프로젝트에서 팀원들이 swagger를 사용하는 것을 보고 배워보고 싶었다.

 

사용법

1. 의존성 추가 ( build.gradle )

//swager
    implementation 'io.springfox:springfox-boot-starter:3.0.0'
    implementation 'io.springfox:springfox-swagger-ui:3.0.0'

 

2. Docket의 Bean 등록을 위한 클래스 생성 ( SwaggerConfig.java)

@EnableSwagger2
@Configuration
public class SwaggerConfig {
    @Bean
    public Docket api() {
        return new Docket(DocumentationType.OAS_30)
                .securityContexts(Collections.singletonList(securityContext()))
                .securitySchemes(List.of(apiKey()))
                .select()
                .paths(PathSelectors.any())
                .build().apiInfo(apiInfo());
    }

    //이후 권한인증 확인을 위해서
    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 List.of(new SecurityReference("Authorization", authorizationScopes));
    }

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

    private ApiInfo apiInfo() {
        return new ApiInfoBuilder()
                .title("ColdPitch API")
                .description("콜드피치 API 명세")
                .version("1.0.0")
                .build();
    }
}

 

3. 컨트롤러 작성

- 현재 프로젝트의 기능에 포함되는 사업자 등록번호 진위검증 컨트롤러 

@RestController
@RequiredArgsConstructor
@RequestMapping("/api/v1/company")
public class CompanyRegistrationController {
    private final CompanyRegistrationService companyRegistrationService;

    @PostMapping("/validate")
    @Operation(summary = "사업자 등록번호 진위검증")
    public ResponseEntity<CompanyRegistrationDto> validate(@RequestBody CompanyRegistrationDto companyRegistrationDto, BindingResult result) {
        if (result.hasErrors()) {
            throw new CustomException(ErrorCode.POST_BAD_REQUEST);
        }

        boolean isValid = companyRegistrationService.validateAndSaveCompanyRegistration(companyRegistrationDto);

        if (!isValid) {
            throw new CustomException(ErrorCode.COMPANY_NOT_FOUND);
        }

        return ResponseEntity.ok(companyRegistrationDto);
    }
}

 

4. 테스트

- Try it out 이후, 서버에서 요청하는 데이터를 형식에 맞게 request에 넣은 후 execute

 

5. 결과 확인 

- 간단하게 워크벤치에서 확인해보니 해당 요청을 잘  받아서 무사히 db에 저장된 것을 볼 수 있다.

 

'ETC' 카테고리의 다른 글

[DB] 데이터베이스 정규화  (0) 2023.06.02
[DB] 데이터베이스 덤프 (with MySql Workbench)  (0) 2023.05.18
[Java] BufferedReader, BufferedWriter  (1) 2023.05.15
[OOP] SOLID 원칙  (1) 2023.05.12
[Java] 메모리 구조  (1) 2023.05.08

+ Recent posts