Dev/Spring Boot
Swagger ๋? ๋ฌด์์ธ๊ณ ?
OK-๊ฐ์
2022. 3. 2. 17:42
๐ค Swagger ๋?
Swagger๋ ๊ฐ๋ฐํ Rest API๋ฅผ ํธ๋ฆฌํ๊ฒ ๋ฌธ์ํ ํด์ฃผ๊ณ , ์ด๋ฅผ ํตํด์ ๊ด๋ฆฌ ๋ฐ ์ 3์ ์ฌ์ฉ์๊ฐ ํธ๋ฆฌํ๊ฒ API๋ฅผ ํธ์ถํด๋ณด๊ณ ํ ์คํธ ํ ์ ์๋ ํ๋ก์ ํธ ์ด๋ค.
Spring Boot์์๋ ๊ฐ๋จํ๊ฒ springfox-boot-starter ๋ฅผ gradle dependencies์ ์ถ๊ฐ ํจ์ผ๋ก ์ฌ์ฉํ ์ ์๋ค.
๋ค๋ง, ์ฃผ์ํ ์ ์ ์ด์ํ๊ฒฝ๊ณผ ๊ฐ์ ์ธ๋ถ์ ๋ ธ์ถ๋๋ฉด ์๋๋ ๊ณณ์์ ์ฌ์ฉํ ๋ ์ฃผ์ ํด์ผ ํ๋ค.
์ฌ์ฉํด๋ณด์.
โ ๋ํ๋์ ์ค์
// https://mvnrepository.com/artifact/io.springfox/springfox-boot-starter
implementation group: 'io.springfox', name: 'springfox-boot-starter', version: '3.0.0'
โ ์ปจํธ๋กค๋ฌ ํ๋ ๋ง๋ค๊ณ
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello(){
return "hello swagger";
}
}
โ ์ด์ TalendAPI๋ฅผ ์ฌ์ฉํ์ฌ Testํ์ง ์๊ณ localhost:8080/swagger-ui/๋ก ๋ค์ด๊ฐ๋ฉด๋จ
- ์ด๋ ๊ฒ ํ๋ฉด ํ์ฌ ๋ด๊ฐ ๋ง๋ API๋ฅผ ๋ณผ์ ์๊ณ Test๋ ์ฝ๊ฒ ํด๋ณผ์ ์๋ค.
โ @Api Controller ์ค๋ช ๋ฃ๊ธฐ
@Api(tags = "API์ ๋ณด๋ฅผ ์ ๊ณตํ๋ Controller")
@RestController
@RequestMapping("/api")
public class ApiController {
@GetMapping("/hello")
public String hello(){
return "hello, Swagger";
}
}
๐๐๐๐๐๐๐๐
โ
@Get ๋ฐฉ์์ PathParam ์ฌ์ฉ๊ณผ RequestRaram ์ฌ์ฉ
@GetMapping("/plus/{x}")
public int plus(@PathVariable int x, @RequestParam int y){
return x+y;
}
)
์ ๋ง ๊ฐํธํ๋ค.
โ
์ถ๊ฐ๋ก @ApiParam์ ์ฌ์ฉํ๋ฉด
@ApiParam(value = "X๊ฐ")
@PathVariable int x,
@ApiParam(value = "y๊ฐ")
@RequestParam int y){
โ
๋ชฐ๋ก ApiImplicitParms๋ฅผ ์ด์ฉ์ผ์ฌ Param๋ค์ ์ ์๋ฅผ ํ๋ฒ์ ํ ์๋ ์๋ค.
@ApiImplicitParams({
@ApiImplicitParam(name = "name", value = "์ฌ์ฉ์ ์ด๋ฆ", required = true, dataType = "string", paramType = "path"),
@ApiImplicitParam(name = "age", value = "์ฌ์ฉ์ ๋์ด", required = true, dataType = "int", paramType = "query")
})
โ DTO์๋ ๋ช ์์ ์ผ๋ก ํํํ ์ ์๋ค.
@AllArgsConstructor
@NoArgsConstructor
@Data
public class UserResponse {
@ApiModelProperty(value = "์ฌ์ฉ์ ์ด๋ฆ", example = "steve")
private String name;
@ApiModelProperty(value = "์ฌ์ฉ์ ๋์ด", example = "10")
private int age;
}
โ ๋ง์ง๋ง์ผ๋ก error ๋ถ๋ถ๋ ๋ฐ๋ก ์ ํ ์ ์๋ค.
@PostMapping("/user")
@ApiResponse(code = 404, message = "not found")
public UserResponse post(@RequestBody UserRequest userRequest){
return new UserResponse(userRequest.getName(), userRequest.getAge());
}