SpringBoot

REST API

김윤지. 2024. 10. 28. 10:51

REST API 구현하기

REST란?

Representatinal State Transfer 의 약자로 자원을 이름으로 구분한 상태(정보)를 주고 받는 것을 말한다.

 

  • 자원(Resource): 소프트웨어가 관리하는 모든 것 ( 데이터, 이미지, 문서 등등)
  • 표현(Representation): 해당 자원을 표현하기 위한 이름( students : [학생정보…] ) 
  • 상태 전달 : 클라이언트에서 정보를 요청하면 해당 정보를  ( students : [학생정보…] ) 이런 상태로 전달한다. 이때 데이터의 타입은 XML, JSON이다.

 

REST의 개념

  • 어떤 자원에 대해 CRUD 연산을 수행하기 위해 URI(Resource)로 GET, POST 등의 방식(Method)을

사용하여 요청을 보내고, 요청을 위한 자원은 특정한 형태로 표현된다.

  • restful: restAPI로 구현한 시스템을 지칭하는 용어

 

REST API MODEL

 

REST API 란? 

RESTful API는 두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스이다.

클라이언트와 서버 간의 독립성을 보장하므로 유연하고 확장 가능한 애플리케이션을 구축하는 데 유용하며, 다양한 언어와 프레임워크에서 지원되고 있음.

  • rest 제약 조건 
  • 클라이언트-서버  : 구현 방식이 클라이언트와 서버 구조이다.(웹애플리케이션)
  • 무상태 : 상태가 없으므로 다른 요청들에 영향을 받지 않는다.(각각의 요청이 독립적으로 처리되므로 클라이언트에 대한 상태를 저장할 필요가 없어 더 많은 클라이언트를 동시에 처리할 수 있다 )
  • 캐시 가능성 : 캐시 가능을 정의하여, 동일한 자원을 계속 요청할 경우 클라이언트가 임시로 데이터를 저장하여 재사용하게 함
  • 일관적인 인터페이스: 리소스에 접근하는 방식, 요청, 응답의 형식이 일관되어야 한다.
  • 레이어 시스템 : 요청이 바로 중앙서버로 가지 않고, 중간 서버들을 거쳐서 처리되도록 하는 시스템(클라이언트의 요청에 따라 인증서버, 캐싱 서버, 로드 밸런서 등에 영향을 미치지 않도록 한다.- 보안성, 확장성,유연성 향상)

 

REST API 설계 규칙 

  1. URL 규칙

2. REST API HTTP 메소드 

  • GET  : 리소스의 세부 정보를 가져온다.
  • POST : 새 리소스를 생성한다. 
  • PUT : 지정된 URI 에 리소스를 만들거나 수정한다.
  • DELETE : 지정된 URI의 리소스를 제거한다.
리소스 POST GET PUT DELETE
/customers 새 고객 만들기 모든 고객 검색 고객 대량 업데이트 모든 고객 제거
/customers/1 Error 고객 1에 대한 세부 정보 검색 고객 1이 있는 경우 고객 1의 세부 정보 업데이트 고객 1 제거
/customers/1/orders 고객 1에 대한 새 주문 만들기 고객 1에 대한 모든 주문 검색 고객 1의 주문 대량 업데이트 고객 1의 모든 주문 제거

 

 

Spring boot Controller에서 REST API HTTP 메소드  사용 예시

@RestController
@RequestMapping("/users")
public class UserController {

    // 사용자 정보 조회
    @GetMapping("/{userId}")
    public ResponseEntity<User> getUser(@PathVariable Long userId) {
        // userId에 해당하는 사용자 정보 조회
        User user = userService.getUser(userId);
       // ResponseEntity객체: HTTP응답 제어기능을 제공하는 객체로 클라이언트로 전달되는 값은
       // → user{K:V,K:V..} 와 200코드이다.  클라이언트에서는 response.state로 200값을 받을 수 있다. 
        return ResponseEntity.ok(user);  
    }

    // 사용자 정보 등록
    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        // 사용자 정보 등록
        User savedUser = userService.createUser(user);
        return ResponseEntity.ok(savedUser);
    }

    // 사용자 정보 수정
        @PutMapping("/{userId}")
        public ResponseEntity<User> updateUser(@PathVariable Long userId, @RequestBody User user) {
            // userId에 해당하는 사용자 정보 수정
            User updatedUser = userService.updateUser(userId, user);
            return ResponseEntity.ok(updatedUser);
        }

        // 사용자 정보 삭제
        @DeleteMapping("/{userId}")
        public ResponseEntity<Void> deleteUser(@PathVariable Long userId) {
            // userId에 해당하는 사용자 정보 삭제
            userService.deleteUser(userId);
            return ResponseEntity.noContent().build();
        }
    }

 

REST API 구현하기 [ CORS란? ] 

  • CORS(Cross-Origin Resource Sharing)는 보안 상의 이유로 동일한 출처(origin)를 가지지 않는 다른 도메인 간의 리소스 공유를 제한하는 브라우저의 정책입니다.
    따라서, Open API를 사용할 때, 클라이언트에서 다른 도메인의 서버로 요청을 보낼 때 CORS 정책에 따라 요청이 차단될 수 있습니다.

REST API 구현하기 [ CORS 허용 ]