24.12.04 TIL RESTful API

신성훈·2024년 12월 4일

TIL

목록 보기
92/162

RESTful API

1. REST란?

REST(Representational State Transfer)는 자원을 정의하고 이를 처리하기 위한 방법을 제공하는 아키텍처 스타일입니다. REST는 웹 상에서 HTTP를 활용해 자원(Resource)을 상태(State) 기반으로 처리할 수 있도록 설계되었습니다.


2. REST의 기본 구성 요소

  1. 자원(Resource)

    • URI(Uniform Resource Identifier)를 통해 접근 가능
    • 예: http://example.com/users (users라는 자원)
  2. 행위(Verb)
    -HTTP 메서드를 사용하여 자원에 대한 행위를 정의

    • GET: 조회
    • POST: 생성
    • PUT: 수정
    • DELETE: 삭제
  3. 표현(Representation)

    • 자원의 상태를 JSON, XML 등의 형식으로 표현
    • 예: { "id": 1, "name": "John Doe" }

3. RESTful API란?

RESTful API는 REST 아키텍처 스타일을 준수하는 API를 의미합니다.
이를 통해 클라이언트와 서버 간의 통신이 간단하고 일관되며 확장 가능한 방식으로 이루어집니다.


4. RESTful API 설계 원칙

  1. URI는 자원을 표현해야 한다.

    • 자원의 이름은 명사로 표현
    • 예: /users, /users/{id}/posts
  2. HTTP 메서드를 적절히 사용해야 한다.

    • CRUD 기능에 따라 적합한 메서드 선택
  3. 상태를 유지하지 않는다(Stateless).

    • 각 요청은 독립적이며 서버는 클라이언트의 상태를 저장하지 않음
  4. 표현과 자원을 분리한다.

    • JSON, XML 등 다양한 형식으로 데이터 표현 가능
  5. 코드 상태를 명확히 한다.

    • HTTP 상태 코드를 적절히 활용(예: 200 OK, 201 Created, 404 Not Found).

5. RESTful API 예제 (Spring Boot 사용)

1) 간단한 REST 컨트롤러

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

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

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

    private final Map<Integer, String> users = new HashMap<>();

    // CREATE: 사용자 생성
    @PostMapping
    public String createUser(@RequestParam String name) {
        int id = users.size() + 1;
        users.put(id, name);
        return "User created with ID: " + id;
    }

    // READ: 사용자 조회
    @GetMapping("/{id}")
    public String getUser(@PathVariable int id) {
        return users.getOrDefault(id, "User not found");
    }

    // UPDATE: 사용자 수정
    @PutMapping("/{id}")
    public String updateUser(@PathVariable int id, @RequestParam String name) {
        if (users.containsKey(id)) {
            users.put(id, name);
            return "User updated.";
        }
        return "User not found.";
    }

    // DELETE: 사용자 삭제
    @DeleteMapping("/{id}")
    public String deleteUser(@PathVariable int id) {
        if (users.remove(id) != null) {
            return "User deleted.";
        }
        return "User not found.";
    }
}

2) 실행 예시

MethodEndpointDescriptionResponse
POST/api/users사용자 생성"User created with ID: 1"
GET/api/users/1ID 1 사용자 조회"Shin"
PUT/api/users/1ID 1 사용자 이름 수정"User updated."
DELETE/api/users/1ID 1 사용자 삭제"User deleted."

6. RESTful API의 장점

  1. 일관성 있는 설계

    • HTTP 메서드와 URI 설계를 통해 가독성 높은 API 제공
  2. 확장성

    • 클라이언트와 서버의 독립성으로 서비스 확장 용이
  3. 유연한 데이터 표현

    • JSON, XML 등 다양한 포맷 지원
  4. 캐싱 활용 가능

    • HTTP 프로토콜을 기반으로 캐싱을 통해 성능 향상

7. 마무리

  • Spring Boot로 RESTful API 설계하기가 처음에는 어려웠지만 실제 구현을 통해 URI 설계와 HTTP 메서드의 활용이 중요하다는 점을 깨달았습니다.
  • Stateless 설계를 유지하는 것이 API의 확장성과 유지보수에 얼마나 큰 영향을 주는지 알게 되었습니다.
profile
조급해하지 말고, 흐름을 만들고, 기록하면서 쌓아가자.

0개의 댓글