REST API

eunheelog·2024년 7월 19일
0

Beyond SW

목록 보기
10/15

REST API 설계

  • 자원을 나타낼 때는 명사로 표현, 일반적으로 복수형 사용
  • 복합명사인 경우 - 사용

스웨거(Swagger)


스프링 부트와 연동하기

  • 스프링 부트에서 사용하려면 pom.xml에 의존성 추가
<dependency>
  <groupId>org.springdoc</groupId>
  <artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
  <version>2.6.0</version>
</dependency>
  • SwaggerConfig.java 파일 작성
@Configuration
@OpenAPIDefinition(
  info = @Info(
          title = "Title",
          description = "Description",
          version = "v1.0.0"
  )
)
public class SwaggerConfig {
  @Bean
  public OpenAPI openAPI() {
      return new OpenAPI()
              .components(new Components())
  }
}
  • 위 작업들 완료 후 /swagger-ui/index.html로 접속하면 API 문서 확인 가능

학과 서비스(department-service)

1) 학과 조회

  • GET v1/department-service/departments
  • GET v1/department-service/departments/{department-no}

2) 학과 등록

  • POST v1/department-service/departments

3) 학과 수정

  • PUT v1/department-service/departments/{department-no}
    * 변경할 데이터는 body에 담아서 보냄

4) 학과 삭제

  • DELETE v1/department-service/departments/{department-no}
@RestController
@RequestMapping("/v1/department-service")
// class 설명
@Tag(name = "Department APIs", description = "학과 관련 API 목록")
@RequiredArgsConstructor
// 밑에 만들어지는 애들은 앞에 /v1/department-service 가 붙음
public class DepartmentController {
	private final DepartmentService departmentService;
	
	/*
	 * HttpEntity
	 *  - 스프링 프레임워크에서 제공하는 클래스로 HTTP 요청 또는 응답에 해당하는
	 *  HTTP Header와 HTTP Body를 포함하는 클래스이다.
	 *  
	 * ResponseEntity
	 *  - HttpEntity를 상속하는 클래스로 HTTP 응답 데이터를 포함하는 클래스이다.
	 *  - 개발자가 직접 HTTP Header, Body, Status를 세팅하여 반환할 수 있다.
	 */
	
	@GetMapping("/departments")
	// API 설명
	@Operation(summary = "학과 목록 조회", description = "전체 학과의 목록을 조회한다.")
	@ApiResponses(
		value = {
			@ApiResponse(
				responseCode = "200",
				description = "OK",
				content = @Content(mediaType = "application/json")
			),
			@ApiResponse(
				responseCode = "404",
				description = "NOT FOUND",
				content = @Content(mediaType = "application/json")
			)		
		}
	)
	@Parameters(
		value = {
			@Parameter(name = "page", description = "페이지 번호", example = "1"),
		    @Parameter(name = "numOfRows", description = "한 페이지의 결과 수", example = "10")
		}
	)
	public ResponseEntity<List<Department>> getDepartments(@RequestParam int page,
				@RequestParam int numOfRows) {
//	public ResponseEntity<Map<String, Object>> getDepartments() {
//	public ResponseEntity<Object> getDepartments() { 로 써도 됨
//		Map<String, Object> map = new HashMap<>();
		List<Department> departments = departmentService.getDepartments(page, numOfRows);
//		return new ResponseEntity<>(departments, HttpStatus.OK); // ResponseEntity 객체
		
		return DepartmentMapper.selectDepartments(rowBounds);
//		map.put("name", "홍길동");
//		map.put("age", 32);
//		map.put("hobby", new String[] {"축구", "농구", "야구"});
		
		
//		return "getDepartments"; // 뷰 이름
//		return map; // 객체
//		return ResponseEntity.ok(map); // ResponseEntity 객체
//		return new ResponseEntity<>(map, HttpStatus.NOT_FOUND); // ResponseEntity 객체
	}
	
}
profile
⛧1일 1알고리즘⛧

0개의 댓글