Swagger Documentation
- Swagger는 개발자가 REST API 서비스를 설계, 빌드, 문서화할 수 있도록한다.
- 다음과 같은 경우 유용하게 사용된다.
- 다른 개발팀과 협업을 진행할 경우
- 이미 구축되어있는 프로젝트에 대한 유지보수를 진행할 경우
- 백엔드의 API를 호출하는 프론트앤드 프로그램을 제작할 경우
- dependency
<dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger2</artifactId> <version>2.9.2</version> </dependency> <dependency> <groupId>io.springfox</groupId> <artifactId>springfox-swagger-ui</artifactId> <version>2.9.2</version> </dependency>
- URL
- localhost:8180/v2/api-docs
- Swagger 문서에 기본이 되는 정보를 JSON 형태로 제공한다
- localhost:8180/swagger-ui.html
- HTML 형식으로 배포되고 있는 Api Documentation을 볼 수 있다.
- localhost:8180/v2/api-docs
- Customizing
- config 파일 등록
- api info, contact 정보, produce(accept), consume(content-type) 등을 지정한다.
@Configuration @EnableSwagger2 public class SwaggerConfig { private static final Contact DEFAULT_CONTACT = new Contact("devhtak", "https://devhtak.github.io", "devhtak@gmail.com"); private static final ApiInfo DEFAULT_API_INFO = new ApiInfo("API Title", "My User management API service", "1.0", "urn:tos", DEFAULT_CONTACT, "Apache 2.0", "http://www.apache.org/license/LICENSE-2.0", new ArrayList<>()); private static final Set<String> DEFAULT_PRODUCES_AND_CONSUMES = new HashSet<>(Arrays.asList("application/json", "application/xml")); @Bean public Docket api() { return new Docket(DocumentationType.SWAGGER_2) .apiInfo(DEFAULT_API_INFO) .produces(DEFAULT_PRODUCES_AND_CONSUMES) .consumes(DEFAULT_PRODUCES_AND_CONSUMES); } }
- HATEOAS와 같이 사용할 때 예외가 발생할 수 있다.
- 아래와 같이 configuration에 빈으로 등록하면 사용할 수 있다.
@Bean public LinkDiscoverers discoverers() { List<LinkDiscoverer> plugins = new ArrayList<>(); plugins.add(new CollectionJsonLinkDiscoverer()); return new LinkDiscoverers(SimplePluginRegistry.create(plugins)); }
- 아래와 같이 configuration에 빈으로 등록하면 사용할 수 있다.
- api info, contact 정보, produce(accept), consume(content-type) 등을 지정한다.
- model 파일
- 사용되는 객체에 description등을 사용할 수 있다.
@Data @NoArgsConstructor @AllArgsConstructor @Getter @Setter @ApiModel(description = "사용자 상세 정보를 위한 도메인 객체") public class User { private Integer id; @Size(min = 2, message= "이름은 2글자 이상 입력해주세요.") @ApiModelProperty(notes = "사용자 이름을 입력해 주세요.") private String name; @Past @ApiModelProperty(notes = "사용자 등록일을 입력해 주세요.") private LocalDateTime joinDate; //@JsonIgnore @ApiModelProperty(notes = "사용자 패스워드를 입력해 주세요.") private String password; //@JsonIgnore @ApiModelProperty(notes = "사용자 주민번호를 입력해 주세요.") private String ssn; }
- 사용되는 객체에 description등을 사용할 수 있다.
- config 파일 등록