OpenAPI๋?
OpenAPI Specification(OAS)๋ผ๊ณ ๋ ํ๋ OpenAPI๋ RESTful API๋ฅผ ๊ธฐ์ ์๋ ๊ท์น์ ๋ง๊ฒ API Spec์ json์ด๋ yaml๋ก ํํํ๋ ๋ฐฉ์์ ์๋ฏธํ๋ค.
- RESTful API ๋ฅผ ๊ธฐ์ ํ๋ ํ์ค์ผ๋ก ์๋น์ค์์ ์ ๊ณตํ๋ API ์ ๊ธฐ๋ฅ๊ณผ End Point ๋ฅผ ๊ฐ๋ฐ์๋ ์์คํ ์ด ์๋์ผ๋ก ๋ฐ๊ฒฌํ๊ณ ์ฒ๋ฆฌํ๋๋ฐ ํ์ํ ์ ๋ณด๋ฅผ ์ ๊ณตํ๋ค.
- ์ ์๋ Swagger 2.0๊ณผ ๊ฐ์ ์ด๋ฆ์ผ๋ก ๋ถ๋ ธ๋ค๊ฐ 3.0๋ฒ์ ์ผ๋ก ์ฌ๋ผ์ค๋ฉด์ OpenAPI 3.0 Specification(๋๋ Swagger 3.0)์ผ๋ก ์นญํ๋ค.
๐ Open API(Open Application Programming Interface, ๊ณต๊ฐ API)
๋๊ตฌ๋ ์ฌ์ฉํ ์ ์๋๋ก ๊ณต๊ฐ๋ API๋ฅผ ๋งํ๋ค. Public API๋ผ๊ณ ๋ ๋ถ๋ฅธ๋ค.
Swagger๋?
๊ฐ๋จํ ์ค์ ์ผ๋ก API ๋ฌธ์๋ฅผ ์๋ํํด์ฃผ๋ ์คํ์์ค ํ๋ ์์ํฌ์ด๋ค.
- OpenAPI ์ฌ์์ ์ค์ฌ์ผ๋ก ๊ตฌ์ถ๋ ์คํ์์ค ๋ฌธ์ํ ๋๊ตฌ์ด๋ค.
- API ๋ช ์ธ์๋ฅผ ์ง์ ์์ฑํ๋ ๋์ Swagger๋ฅผ ์ฌ์ฉํด API๋ฅผ ๋ฌธ์ํํ ์ ์๋ค.
- Spring REST Docs์ ๋ฌ๋ฆฌ ์ฝ๋ ๋ช ์ค๋ง ์ถ๊ฐํ์ฌ ๋ง๋ค ์ ์๋ค.
- ๋ฌธ์ ํ๋ฉด์์ API๋ฅผ ๋ฐ๋ก ํ ์คํธํ ์ ์๋ค.
- API ๋ฌธ์๋ฅผ ์์ฑํ๋ ์๊ฐ์ ์ ์ฝํ๊ณ API ์ ๋ณด๋ฅผ ์ค์๊ฐ์ผ๋ก ์ ์งํ ์ ์๋ค.
Spring boot์ Swagger 3.0 ์ ์ฉํ๊ธฐ
1. Swagger ์ฌ์ฉ์ ์ํ ์์กด์ฑ ์ถ๊ฐ(springfox ์ฌ์ฉ)
implementation "io.springfox:springfox-boot-starter:3.0.0"
implementation "io.springfox:springfox-swagger-ui:3.0.0"
2. Swagger ์ค์
@Configuration
public class SwaggerConfig {
@Bean
public Docket api() {
return new Docket(DocumentationType.OAS_30)
.useDefaultResponseMessages(false)
.select()
.apis(RequestHandlerSelectors.basePackage("com.example.sample.controller"))
.paths(PathSelectors.any())
.build()
.apiInfo(apiInfo());
}
private ApiInfo apiInfo() {
return new ApiInfoBuilder()
.title("Practice Swagger")
.description("practice swagger config")
.version("1.0")
.build();
}
}
3. Swagger-ui ์ ์ํ์ฌ ํ์ธ
- Swagger2: http://localhost:8080/swagger-ui.html
- Swagger3: http://localhost:8080/swagger-ui/index.html
4. Controller์ API ์์ฑํ๊ณ ์ค๋ช ์ถ๊ฐ
@RestController
public class BasicController {
@PostMapping("/api/member")
@ApiOperation(value = "์ฌ์ฉ์ ๋ชฉ๋ก ์กฐํ", notes = "๊ฐ์
๋ ์ฌ์ฉ์ ๋ชฉ๋ก์ ์กฐํํฉ๋๋ค.")
public List<String> getMemberList() {
List<String> memberList = Arrays.asList("anna", "tom", "grace");
return memberList;
}
@GetMapping("/api/member/{id}")
@ApiOperation(value = "์ฌ์ฉ์ ์กฐํ", notes = "ID๋ก ์ฌ์ฉ์๋ฅผ ์กฐํํฉ๋๋ค.")
public String getMemberById(@PathVariable("id") String id) {
List<String> memberList = Arrays.asList("anna", "tom", "grace");
return memberList.stream()
.filter(item -> item.equals(id))
.findAny()
.orElse(null);
}
}
5. ๋ค์ํ ํ๋ผ๋ฏธํฐ๋ก API ํธ์ถํ์ฌ ํ ์คํธ
'๊ฐ๋ฐ > Spring' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Spring Security ์ค๋ณต ๋ก๊ทธ์ธ ๋ฐฉ์ง ์ค์ (0) | 2022.03.15 |
---|---|
Spring Boot ํ๋ก์ ํธ git ์ฐ๋ (0) | 2022.03.09 |
Spring Boot์ MySQL / Mybatis ์ฐ๊ฒฐํ๊ธฐ (0) | 2022.03.09 |
Spring Boot ํ๋ก์ ํธ ์์ฑํ๊ธฐ (0) | 2022.03.08 |
JPA, Hibernate (0) | 2022.03.08 |
๋๊ธ