TIL 2023/12/05 REST API

YEONGDO·2023년 12월 5일
0

1. RESTful API 설계

1) RESTful API란

  • REST(Representational State Transfer)는 웹 표준을 기반으로 하는 API 설계 아키텍처
  • RESTful API는 네트워크 상에서 클라이언트와 서버 간의 통신을 위해 자원(Resource)의 상태를 전달하는 방법을 정의
  • 클라이언트가 서버의 자원에 접근하고 이를 활용할 수 있도록 하는 역할을 한다.

2) 자원 중심의 URI 설계

  • 자원의 식별: 각 자원은 명확한 URI로 식별되어야 한다.
  • URI는 명사를 사용: 자원은 동사가 아닌 명사를 사용하여 표현 예: /getUsers 대신 /users

3) HTTP 메서드를 통한 행위 정의

  • GET: 자원을 조회 서버에 데이터를 변경하지 않는 안전한(read-only) 작업에 사용된다.
  • POST: 새로운 자원을 생성 예를 들어, 새 사용자 추가에 사용된다.
  • PUT: 자원을 업데이트. 자원의 전체를 교체하는 데 사용된다.
  • DELETE: 자원을 삭제한다.

4) 상태 코드의 적절한 사용

200번대 상태 코드

- **의미**: 클라이언트의 요청이 성공적으로 수행되었음을 나타낸다.
- **예시**:
    - **200 OK**: 요청이 성공적으로 처리됨. GET, PUT 요청에 대한 표준 응답
    - **201 Created**: 요청이 성공적으로 수행되어 새로운 리소스가 생성됨.
    - **204 No Content**: 요청이 성공적이지만, 클라이언트에 보낼 콘텐츠가 없음.
    

300번대 상태 코드 (리다이렉션 메시지)

- **의미**: 요청한 리소스가 다른 URI로 이동되었음을 나타낸다.
- **예시**:
    - **301 Moved Permanently**: 요청한 리소스가 영구적으로 새 위치로 이동됨.
    - **302 Found**: 요청한 리소스가 일시적으로 다른 위치로 이동됨.
    - **304 Not Modified**: 리소스가 변경되지 않았으므로 클라이언트의 캐시된 버전을 사용할 수 있음.
    

400번대 상태 코드 (클라이언트 오류)

- **의미**: 클라이언트의 잘못된 요청으로 인해 서버가 요청을 처리할 수 없음을 나타낸다.
- **예시**:
    - **400 Bad Request**: 서버가 요청을 이해할 수 없음.
    - **401 Unauthorized**: 인증이 필요한 요청임.
    - **403 Forbidden**: 서버가 요청을 거부함.
    - **404 Not Found**: 요청한 리소스를 찾을 수 없음.
    

500번대 상태 코드 (서버 오류)

- **의미**: 서버 측 문제로 인해 요청을 처리할 수 없음을 나타낸다.
- **예시**:
    - **500 Internal Server Error**: 서버 내부 오류로 요청을 처리할 수 없음.
    - **501 Not Implemented**: 서버가 요청 메서드를 지원하지 않음.
    - **503 Service Unavailable**: 서버가 일시적으로 요청을 처리할 수 없음 (예: 과부하 또는 유지보수로 인해).
    

5) 데이터 포맷

JSON(JavaScript Object Notation) 형식을 통해 데이터를 교환하는 것이 트렌드
XML보다 가볍고, 인간이 읽기 쉽다.

6) @PathVariable,@RequestParam, @ModelAttribute, @RequestBody

@PathVariable

  • 개념: @PathVariable은 URL 경로에 포함된 변수를 컨트롤러 메서드의 매개변수로 바인딩하는 데 사용된다.
  • 특징:
    • URL 경로의 일부를 변수로 사용하여, 동적으로 변하는 URL 경로를 처리할 수 있다.
    • 간결하고 직관적인 API 경로를 설계할 수 있다.

@RequestParam

  • 개념: @RequestParam은 클라이언트가 전송하는 HTTP 요청 파라미터를 컨트롤러 메서드의 매개변수로 바인딩하는 데 사용된다.
  • 특징:
      • URL에서 지정된 이름의 파라미터를 메서드 매개변수로 전달
        - 필수 여부, 기본값 설정 등의 추가적인 설정이 가능하다.

@ModelAttribute

  • 개념: @ModelAttribute는 요청 파라미터를 객체로 매핑하여, 복잡한 데이터 구조를 쉽게 다루게 해준다.
  • 특징:
    • 폼 데이터의 각 필드가 객체의 필드와 자동으로 매핑
    • 복잡한 객체 구조의 데이터를 간편하게 처리할 수 있다.

@RequestBody

  • 개념: @RequestBody는 클라이언트가 전송하는 HTTP 요청의 본문(body)을 Java 객체로 변환하여 받는다.
  • 특징:
    • HTTP 요청 본문의 내용을 자바 객체로 역직렬화한다.
    • 주로 JSON 또는 XML 형식의 데이터 처리에 사용된다.

마치며..

오늘은 Spring basic 반 수업을 들으면서 스프링에 대해 다시 한 번 복습할 수 있었고, Todo List에 테스트 코드를 작성하는 개인과제를 마치고 팀 과제를 시작하였다. S.A를 다 같이 작성하는 데 시간이 꽤나 소요가 됐다. 열정적인 팀원분들이 많은 거 같아 좋은 거 같다!!! 나는 게시판 CRUD를 맡았다. TodoList에서 물론 구현은 해봤지만 아직 모르는 게 많은 거 같아서 복습하고자 게시판 CRUD를 선택했다. 맡은 기능 무사히 다 구현해서 팀원분들에게 피해가 안가게끔 노력할 것이다! 이상.

profile
개발 블로그

0개의 댓글