REST API(Representational State Transfer Application Programming Interface)

Kkd·2024년 12월 19일
0

매일메일 개념정리

목록 보기
37/93
post-thumbnail

REST API란?

REST APIRepresentational State Transfer 원칙에 기반한 Application Programming Interface입니다. REST는 웹 서비스의 설계 방식 중 하나로, HTTP 프로토콜을 활용하여 클라이언트와 서버 간의 데이터를 교환합니다. REST API는 주로 웹 애플리케이션에서 사용되며, 효율적이고 확장 가능한 통신을 지원합니다.


REST의 특징

  1. Stateless (무상태성)

    • 서버는 클라이언트의 상태를 저장하지 않습니다.
    • 각 요청은 필요한 모든 정보를 포함해야 하며, 서버는 이를 기반으로 작업을 수행합니다.
  2. Resource 기반 설계

    • 모든 데이터는 "리소스"로 간주됩니다.
    • 리소스는 고유한 URI(Uniform Resource Identifier)로 식별됩니다.
  3. 표준 HTTP 메서드 사용

    • 리소스 작업을 HTTP 메서드로 표현:
      • GET: 리소스 조회
      • POST: 리소스 생성
      • PUT: 리소스 전체 수정
      • PATCH: 리소스 부분 수정
      • DELETE: 리소스 삭제
  4. HTTP 상태 코드 활용

    • 서버는 작업 결과를 HTTP 상태 코드로 응답:
      • 200 OK: 성공
      • 201 Created: 리소스 생성 성공
      • 400 Bad Request: 잘못된 요청
      • 404 Not Found: 리소스를 찾을 수 없음
      • 500 Internal Server Error: 서버 오류
  5. 계층화된 시스템 구조

    • 클라이언트와 서버 사이에 미들웨어(예: 로드 밸런서, 캐시)를 추가할 수 있습니다.

REST API 설계 원칙

  1. 리소스 URI는 명사로 작성

    • 예: /users, /users/{id}, /products/{id}
  2. HTTP 메서드와 URI를 조합해 작업 표현

    • 예:
      • GET /users: 모든 사용자 조회
      • POST /users: 새로운 사용자 생성
      • PUT /users/1: ID가 1인 사용자 전체 수정
      • DELETE /users/1: ID가 1인 사용자 삭제
  3. JSON 포맷 권장

    • REST API의 데이터 교환은 주로 JSON(JavaScript Object Notation)을 사용합니다.
  4. Stateless 설계 유지

    • 클라이언트가 필요한 모든 데이터를 요청에 포함하도록 설계.

REST API 예제 (Java)

1. REST 컨트롤러 구현

import org.springframework.web.bind.annotation.*;

import java.util.HashMap;
import java.util.Map;

@RestController
@RequestMapping("/users")
public class UserController {
    
    private Map<Integer, String> users = new HashMap<>();
    
    // GET 요청: 모든 사용자 조회
    @GetMapping
    public Map<Integer, String> getAllUsers() {
        return users;
    }
    
    // GET 요청: 특정 사용자 조회
    @GetMapping("/{id}")
    public String getUser(@PathVariable int id) {
        return users.getOrDefault(id, "User not found");
    }
    
    // POST 요청: 사용자 생성
    @PostMapping
    public String createUser(@RequestParam String name) {
        int id = users.size() + 1;
        users.put(id, name);
        return "User created with ID: " + id;
    }
    
    // PUT 요청: 사용자 수정
    @PutMapping("/{id}")
    public String updateUser(@PathVariable int id, @RequestParam String name) {
        if (users.containsKey(id)) {
            users.put(id, name);
            return "User updated: " + name;
        } else {
            return "User not found";
        }
    }
    
    // DELETE 요청: 사용자 삭제
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable int id) {
        if (users.containsKey(id)) {
            users.remove(id);
            return "User deleted";
        } else {
            return "User not found";
        }
    }
}

2. REST API 호출 결과

  1. GET /users
    요청:

    curl -X GET http://localhost:8080/users

    응답:

    {}
  2. POST /users
    요청:

    curl -X POST http://localhost:8080/users -d "name=John"

    응답:

    "User created with ID: 1"
  3. GET /users/1
    요청:

    curl -X GET http://localhost:8080/users/1

    응답:

    "John"
  4. PUT /users/1
    요청:

    curl -X PUT http://localhost:8080/users/1 -d "name=Jane"

    응답:

    "User updated: Jane"
  5. DELETE /users/1
    요청:

    curl -X DELETE http://localhost:8080/users/1

    응답:

    "User deleted"

REST API의 장점

  1. 표준화된 프로토콜: HTTP 사용.
  2. 유연성: 다양한 플랫폼에서 쉽게 사용 가능.
  3. 확장성: 계층 구조와 캐싱 등 추가 가능.
  4. 가독성: 명확한 URI와 JSON 데이터 포맷.

REST API의 단점

  1. 복잡한 요청: 대규모 데이터 처리에는 비효율적.
  2. 상태 관리 어려움: Stateless 특성으로 인해 클라이언트 상태를 유지하기 어렵다.

REST API는 현대 애플리케이션 개발에서 필수적이며, 클라이언트-서버 간의 통신을 단순하고 명확하게 만듭니다.

추가 학습 자료

profile
🌱

0개의 댓글