[API]HTTP Method와 REST, API

·2023년 7월 5일
0

프로젝트 공부

목록 보기
6/33
post-thumbnail

요약
1. GET : 조회
2. POST : 생성(새로운 자원의 생성, 특정 정보를 클라이언트가 서버로 넘기고 그에 대한 처리를 요청하는 것도 post로 처리 가능)
3. PUT : 갱신(전체)
4. PATCH : 갱신(일부)
5. DELETE : 삭제

참고 🔗[API]@RequestParam & @RequestBody의 차이, 그리고 @ModelAttribute와@PathVariable

REST란?

REST = Representational State Transfer

  • 자원(Resource): URI
  • 자원에 대한 행위(Verb): HTTP Method
  • 자원에 대한 행위의 표현(Representations)

이때 HTTP Method가 나온다.
HTTP Method란 REST를 지키면서 행위를 전달하는 방법이라고 볼 수 있다.

RESTful API Endpoint의 설계

이제 RESTful한 API의 설계를 위한 규칙을 알아봅시다.

RESTful한 API의 Endpoint는 아래의 규칙에 따라 설계가 가능합니다.

  1. URI에 동사가 포함이 되어선 안된다.
  2. URI에서 단어의 구분이 필요한 경우 -(하이픈)을 이용한다.
  3. 자원은 기본적으로 복수형으로 표현한다.
  4. 단 하나의 자원을 명시적으로 표현을 하기 위해서는 /users/id와 같이 식별 값을 추가로 사용한다.
  5. 자원 간 연관 관계가 있을 경우 이를 URI에 표현한다.

REST 특징

1) Uniform (유니폼 인터페이스)
Uniform Interface는 URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행하는 아키텍처 스타일을 말합니다.

2) Stateless (무상태성)
REST는 무상태성 성격을 갖습니다. 다시 말해 작업을 위한 상태정보를 따로 저장하고 관리하지 않습니다. 세션 정보나 쿠키정보를 별도로 저장하고 관리하지 않기 때문에 API 서버는 들어오는 요청만을 단순히 처리하면 됩니다. 때문에 서비스의 자유도가 높아지고 서버에서 불필요한 정보를 관리하지 않음으로써 구현이 단순해집니다.

3) Cacheable (캐시 가능)
REST의 가장 큰 특징 중 하나는 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능합니다. 따라서 HTTP가 가진 캐싱 기능이 적용 가능합니다. HTTP 프로토콜 표준에서 사용하는 Last-Modified태그나 E-Tag를 이용하면 캐싱 구현이 가능합니다.

4) Self-descriptiveness (자체 표현 구조)
REST의 또 다른 큰 특징 중 하나는 REST API 메시지만 보고도 이를 쉽게 이해 할 수 있는 자체 표현 구조로 되어 있다는 것입니다.

5) Client - Server 구조
REST 서버는 API 제공, 클라이언트는 사용자 인증이나 컨텍스트(세션, 로그인 정보)등을 직접 관리하는 구조로 각각의 역할이 확실히 구분되기 때문에 클라이언트와 서버에서 개발해야 할 내용이 명확해지고 서로간 의존성이 줄어들게 됩니다.

6) 계층형 구조
REST 서버는 다중 계층으로 구성될 수 있으며 보안, 로드 밸런싱, 암호화 계층을 추가해 구조상의 유연성을 둘 수 있고 PROXY, 게이트웨이 같은 네트워크 기반의 중간매체를 사용할 수 있게 합니다.


HTTP

HTTP : HyperText Transfer Protocol,직역하자면 문자들의 전송 규칙을 뜻한다.

  • 인터넷상에서 데이터를 주고 받기 위한 서버/클라이언트 모델을 따르는 프로토콜이다
  • TCP/IP 위에서 작동한다

HTTP Method

대표적인 Method

  • POST : 실행 / 저장 ex) 회원가입 / 로그인
    (POST를 통해 해당 URI를 요청하면 리소스를 생성한다)
  • GET : 정보 검색 ex) 게시판 리스트 불러오기
    (GET를 통해 해당 리소스를 조회한다. 리소스를 조회하고 해당 도큐먼트에 대한 자세한 정보를 가져온다)
  • PUT : 전체 수정 ex) 회원정보 전체 수정
    (PUT를 통해 해당 리소스를 수정한다)
  • PATCH : 일부 수정 ex) 회원정보 일부 수정
    (Update에 가장 가깝게 쓰이고 있다)
  • DELETE : 삭제 (DELETE를 통해 리소스를 삭제한다)

HTTP의 Method는 총 8개가 있으며 대표적인 Method는 POST, GET, PUT, DELETE가 있다.

  • GET: 서버로 부터 데이터를 취득
  • POST: 서버에 데이터를 추가, 작성 등
  • PUT: 서버의 데이터를 갱신, 작성 등
  • DELETE: 서버의 데이터를 삭제
  • HEAD: 서버 리소스의 헤더(메타 데이터의 취득)
  • OPTIONS: 리소스가 지원하고 있는 메소드의 취득
  • PATCH: 리소스의 일부분을 수정
  • CONNECT: 프록시 동작의 터널 접속을 변경


📌GET

GET 메소드는 주로 데이터를 읽거나(Read) 검색(Retrieve)할 때에 사용되는 메소드이다. 만약에 GET요청이 성공적으로 이루어진다면 XML이나 JSON과 함께 200 (Ok) HTTP 응답 코드를 리턴한다. 에러가 발생하면 주로 404 (Not found) 에러나 400 (Bad request) 에러가 발생한다.

  • HTTP 명세에 의하면 GET 요청은 오로지 데이터를 읽을 때만 사용되고 수정할 때는 사용하지 않는다.
  • GET 요청은 idempotent 하다.
  • 같은 요청을 여러 번 하더라도 변함없이 항상 같은 응답을 받을 수 있다.
  • 데이터를 변경하는 연산에 사용하면 안된다

예시

GET /user/1

데이터를 조회하는 것이기 때문에 요청시에 Body 값과 Content-Type이 비워져 있으며 조회에 성공한다면 Body 값에 데이터 값을 저장하여 성공 응답을 보낸다

📌POST

POST 메소드는 주로 새로운 리소스를 생성(create)할 때 사용된다. 조금 더 구체적으로 POST는 하위 리소스(부모 리소스의 하위 리소스)들을 생성하는데 사용된다. 성공적으로 creation을 완료하면 201 (Created) HTTP 응답을 반환한다.

  • POST 요청은 idempotent 하지 않다.
  • 같은 POST 요청을 반복해서 했을 때 항상 같은 결과물이 나오는 것을 보장하지 않는다
  • 두 개의 같은 POST 요청을 보내면 같은 정보를 담은 두 개의 다른 resource를 반환할 가능성이 높다.

예시

POST /user
body : {date : "example"}
Content-Type : "application/json"
//JSON을 이용한 예시

데이터를 생성하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다
PUT
정의
PUT는 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용됩니다.

PUT 요청은 idempotent 합니다.
동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성됩니다.
예시
PUT /user/1
body : {date : "update example"}
Content-Type : "application/json"

📌PUT

PUT는 리소스를 생성 / 업데이트하기 위해 서버로 데이터를 보내는 데 사용됩니다.

PUT 요청은 idempotent 합니다.
동일한 PUT 요청을 여러 번 호출하면 항상 동일한 결과가 생성됩니다.

예시

PUT /user/1
body : {date : "update example"}
Content-Type : "application/json"
//JSON을 이용한 예시

데이터를 수정하는 것이기 때문에 요청시에 Body 값과 Content-Type 값을 작성해야한다.

📌DELETE

DELETE 메서드는 지정된 리소스를 삭제합니다.
예시

DELETE /user/1

데이터를 삭제하는 것이기 때문에 요청시에 Body 값과 Content-Type 값이 비워져있다

❗PUT vs PATCH

  • 정보를 수정할 수 있는 HTTP Method로는 PUT과 PATCH가 있다.
  • PUT은 지정한 데이터를 전부 수정하는 Method이지만 PATCH는 정보의 일부분이 변경되는 방법이다. 그래서 PUT은 멱등하지만, PATCH는 멱등하다고 볼 수 없다

API

API란 서버와 클라이언트 사이에 상호작용을 할 수 있게 만들어주는 버튼과 같은 존재이다. 즉, 클라이언트와 서버라는 두 영역이 API라는 버튼으로 맞닿아 있고 그 버튼을 통해 서버와 클라이언트가 상호작용을 하기 때문이다

API = Application Programming Interface
API는 두 소프트웨어가 서로 통신할 수 있게 연결하는 인터페이스를 뜻한다

REST API의 중심 규칙

  1. URI는 정보의 자원을 표현해야 한다.
  2. 자원에 대한 행위는 HTTP Method(GET, POST, PUT, DELETE)로 표현한다

API의 기능은 같지만 프로토콜 방식은 다를 수 있다. 그래서 지속 가능한, 계속 사용할 수 있는 통일성 있는 API라는 REST API가 탄생하게 되었다

URL 컨벤션, Response 컨벤션 관련 참고 🔗링크

출처
Packet? Header? RESTful? REST API?
REST API란? (+API란?)

profile
개발자가 되고싶은 낭랑 24세

0개의 댓글

관련 채용 정보