REST API - 개요

Hallelujah·2024년 11월 28일

CS

목록 보기
6/10
graph LR
    사용자((사용자)) --> WEB[WEB]
    사용자 --> Mobile[Mobile]
    WEB --> API[API]
    Mobile --> API
    API --> DB[(DB)]

1. REST API란?

1.1 REST란?

  • REST(Representational State Transfer)는 웹 서비스 설계 아키텍처 스타일로, 자원을 정의하고 자원에 대한 작업을 HTTP 프로토콜을 통해 처리합니다.
  • 2000년, 로이 필딩(Roy Fielding)의 박사 학위 논문에서 소개되었습니다.

1.2 REST API란?

  • REST API는 REST 아키텍처 스타일을 따르는 응용 프로그램 인터페이스(API)입니다.
  • 웹에서 클라이언트-서버 간 데이터를 주고받기 위해 설계됩니다.

2. REST의 핵심 원칙

REST는 다음 6가지 아키텍처 제약을 따릅니다:

2.1 클라이언트-서버 (Client-Server)

  • 클라이언트는 사용자 인터페이스(UI)를 담당하고, 서버는 데이터 저장 및 비즈니스 로직을 담당.
  • 두 컴포넌트는 서로 독립적으로 발전 가능.

2.2 상태 없음 (Stateless)

  • 각 요청은 독립적이고, 서버는 클라이언트의 상태를 저장하지 않습니다.
  • 요청에는 필요한 모든 정보가 포함되어야 합니다(예: 인증 토큰).

2.3 캐시 가능 (Cacheable)

  • 응답은 캐시 가능해야 하며, 클라이언트는 서버로의 요청을 줄일 수 있습니다.

2.4 계층화 시스템 (Layered System)

  • 클라이언트는 서버가 직접 처리하는지, 또는 다른 중간 계층이 요청을 처리하는지 알 필요가 없습니다.

2.5 인터페이스의 일관성 (Uniform Interface)

  • 자원(URL) 및 행동(HTTP 메서드)의 정의가 명확해야 합니다.

2.6 필요 시 코드로 전송 (Code on Demand, 선택적)

  • 서버가 클라이언트로 코드를 전송하고 실행할 수 있도록 허용합니다(예: 자바스크립트).

3. REST API의 구성 요소

3.1 자원 (Resource)

  • REST API의 핵심은 자원이며, 각각의 자원은 고유한 URI(Uniform Resource Identifier)로 식별됩니다.
    • 예: /users, /products, /orders

3.2 HTTP 메서드

  • 자원에 대한 작업은 HTTP 메서드를 사용하여 표현됩니다.
HTTP 메서드설명예시
GET자원을 조회GET /users/1
POST자원을 생성POST /users
PUT자원을 업데이트(전체 수정)PUT /users/1
PATCH자원을 업데이트(부분 수정)PATCH /users/1
DELETE자원을 삭제DELETE /users/1

3.3 상태 코드 (Status Code)

  • 응답 상태를 나타내는 HTTP 상태 코드를 사용합니다.
상태 코드설명
200 OK요청 성공
201 Created자원 생성 성공
400 Bad Request잘못된 요청
401 Unauthorized인증 실패
404 Not Found자원 찾을 수 없음
500 Internal Server Error서버 오류

4. RESTful API의 장점

  1. 간결하고 일관된 인터페이스:
    • HTTP 메서드와 URI 설계만으로 API의 동작을 이해할 수 있음.
  2. 확장성:
    • 클라이언트-서버 간 분리로 독립적 확장이 가능.
  3. 캐시 활용:
    • 네트워크 성능을 향상시키고 서버 부하를 줄일 수 있음.
  4. 다양한 포맷 지원:
    • JSON, XML 등 다양한 데이터 포맷으로 응답 가능.

5. RESTful API 설계 예제

5.1 URI 설계

  • 자원 기반으로 URI를 설계해야 합니다.
  • 자원은 복수형 명사로 표현합니다.
    • 잘못된 URI: /getUser, /updateProduct
    • 좋은 URI: /users, /products

예시

기능HTTP 메서드URI
사용자 목록 조회GET/users
특정 사용자 조회GET/users/{id}
사용자 생성POST/users
사용자 수정PUT/users/{id}
사용자 삭제DELETE/users/{id}

6. RESTful API 개발 예제

6.1 Spring Boot REST Controller

Controller 예제

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

import java.util.ArrayList;
import java.util.List;

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

    private List<String> users = new ArrayList<>();

    @GetMapping
    public List<String> getUsers() {
        return users;
    }

    @PostMapping
    public String createUser(@RequestBody String user) {
        users.add(user);
        return "User created";
    }

    @GetMapping("/{id}")
    public String getUser(@PathVariable int id) {
        return users.get(id);
    }

    @PutMapping("/{id}")
    public String updateUser(@PathVariable int id, @RequestBody String user) {
        users.set(id, user);
        return "User updated";
    }

    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable int id) {
        users.remove(id);
        return "User deleted";
    }
}

7. RESTful API와 기타 아키텍처 비교

특징RESTSOAP
프로토콜HTTPHTTP, SMTP, TCP 등
데이터 포맷JSON, XMLXML
설계 복잡도단순복잡
확장성뛰어남낮음
표준화비공식 표준공식 표준

8. 학습 자료

REST API 테스트 도구

  • Postman: API 호출 및 테스트 도구.
  • Swagger: API 문서화 및 테스트 도구.
profile
개발자

0개의 댓글