Get vs Post (REST API)

Previous Next

Index


REST API (Representational State Transfer API)

1. 개념

두 컴퓨터 시스템이 인터넷을 통해 정보를 안전하게 교환하기 위해 사용하는 인터페이스

→ REST 기반의 아키텍처를 사용함으로써 대규모의 고성능 특징을 안정적으로 지원할 수 있다.

REST는 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 지원하는 것을 의미한다.

→ 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여한다.


2. 구성

자원에 대한 CRUD 요청을 특정한 형태로 구성하여 전달한다.

CRUD 요청이란?

Screen Shot 2022-09-26 at 11 34 14 PM

데이터를 다룰 때 사용하는 4가지 요청으로 Create, Read, Update, Delete를 뜻한다.

Method, Resource, Representation of Resource에 대한 자세한 설명은 RESTful API에 대한 설명이 끝나고 이어집니다.


3. 작동방식

  1. 클라이언트가 서버에 요청을 전송한다. (이 때, 클라이언트는 API 문서에 따라 서버가 이해할 수 있는 형식에 맞춰 요청을 작성한다.)
  2. 서버가 클라이언트를 인증하고 해당 요청을 수행할 수 있는 권한이 클라이언트에 있는지 확인한다.
  3. 클라이언트의 권한이 확인되면 서버는 요청을 수신하고 내부적으로 처리한다.
  4. 서버가 클라이언트에게 응답을 반환한다. (응답에는 요청을 성공했는지의 여부와 요청한 내용이 포함된다.)


4. 특징

  1. Server - Client 구조

    → Server는 API를 제공하고 비즈니스 로직을 처리하고 Client는 사용자 인증이나 세션 정보 등을 직접 관리하고 책임짐으로써 서로 간의 의존도가 줄어든다.

  2. Stateless (무상태)

    → Client의 상태를 Server에 저장하지 않으므로 구현이 단순하다.

    → Server는 각각의 요청을 별개의 것으로 인식하고 처리하므로 처리방식이 일관된다.

  3. Cacheable (캐시 처리 가능성)

    → 웹 표준 HTTP를 그대로 사용하므로 웹에서 사용하는 캐싱 인프라를 그대로 사용할 수 있다. 캐시 사용을 통해 전체 응답 시간과 서버의 자원 이용률을 향상시킬 수 있다.

  4. Layered System (계층화)

    → API 서버는 순수 비즈니스 로직 앞에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 확장성과 보안성을 확장시킬 수 있다.

  5. Uniform Interface (일관성있는 인터페이스)

    → 인터페이스가 일관성이 있어서 HTTP 표준 프로토콜을 따르는 모든 플랫폼에서 사용이 가능하다.



GET vs POST

1. GET

데이터를 읽거나 검색할 때 사용하는 메소드이다. GET 요청이 성공적으로 이루어진다면 서버는 XML이나 JSON 코드와 함께 200 HTTP 응답코드를 리턴한다.

Screen Shot 2022-09-27 at 12 19 56 AM


2. POST

새로운 리소스를 생성할 때 사용하는 메소드이다. POST 요청이 성공적으로 이루어진다면 서버는 생성 결과와 자원의 경로, 201 HTTP 응답코드를 리턴한다.

Screen Shot 2022-09-27 at 12 38 52 AM



그외 메소드

1. PUT

기존 리소스가 있다면 대체하고 없다면 새로 생성할 때 사용하는 메서드이다.

POST vs PUT

POST의 경우에는 URI의 결정권이 서버에 있고 PUT의 경우에는 클라이언트에 있다. 이때문에 같은 요청을 반복하면 POST의 경우에는 데이터가 계속 생성되지만 PUT의 경우에는 그렇지 않다.

URI vs URL

URI : 특정 리소스를 식별하는 통합 자원 식별자로 웹 기술에서 사용하는 논리적 또는 물리적 리소스를 식별하는 고유한 문자열 시퀀스이다. (URL을 포함하는 개념이다.)

URL : 웹주소라고 불리며 컴퓨터 네트워크 상에서 리소스가 어디에 있는지 알려주기 위한 규약이다.

Screen Shot 2022-09-27 at 12 52 12 AM

Screen Shot 2022-09-27 at 12 52 48 AM

Screen Shot 2022-09-27 at 12 53 38 AM


2. PATCH

기존에 존재하는 리소스를 부분적으로 변경할 때 사용하는 메서드이다.

PUT vs PATCH

PUT은 지정된 데이터를 전부 수정하지만 PATCH는 정보의 일부분을 변경한다. 따라서 PUT은 멱등하지만 PATCH는 멱등하지 않다. (PATCH 메서드가 이름을 happy로 바꾸는 경우 멱등하지만, 호출시마다 나이를 10씩 더하는 경우는 멱등하지 않다.)

Screen Shot 2022-09-27 at 12 59 03 AM


3. DELETE

기존에 존재하는 리소스를 삭제할 때 사용하는 메서드이다.

Screen Shot 2022-09-27 at 1 10 55 AM


4. HEAD & OPTIONS & CONNECT & TRACE



스터디 질의 응답 정리


  1. REST api의 특징은 무엇인가요?
  2. GET과 POST의 차이는 무엇인가요?
  3. 비밀번호와 같은 민감한 정보가 포함된 데이터를 전송할 때 GET과 POST 중 어떤 메소드를 사용하는게 좋을까요?
  4. PUT 메서드가 자원을 새로 생성하거나, 수정한다고 하셨는데 생성한다고 하면 멱등하지 않은 것 아닌가요?


추가 질문

  1. 자원과 자원의 표현, 그리고 메소드에 대한 예시를 들어주세요.

GET 메소드의 경우 읽고 싶은 자원의 위치를 URI를 통해서 나타냅니다. 또한 서버와 클라이언트는 JSON과 XML 등으로 자원을 주고 받습니다.


  1. REST 는 무엇이고 RESTful하게 API를 디자인한다는 것은 무엇인가요?

REST는 HTTP URI를 통해 자원을 명시하고 HTTP Method를 통해 해당 자원에 대한 CRUD Operation을 지원하는 것을 의미합니다. RESTful하게 API를 디자인한다는 것은 REST의 설계 규칙을 지켜서 API를 설계한다는 것을 의미합니다.


  1. POST에서 바디에 비밀번호를 넣어서 보낸다고 하면, 해당 정보가 서버의 로그에 텍스트로 저장이 될텐데, 보안이 안되는 것 아닌가요?

POST에서 메세지 바디에 비밀번호 값을 그대로 넣는 것이 아니라 암호화한 값을 넣어서 전송하면 보안이 강화될 것 같습니다.


  1. REST API의 단점은?

첫째, 표준이 존재하지 않는다는 단점이 있습니다. 둘째, 사용할 수 있는 메소드가 제한적입니다. 셋째, 인터넷 익스플로러와 같은 구형 브라우저에서 호환이 되지 않아서 지원해주지 못하는 동작이 많습니다.


  1. REST 외 다른 인터페이스는?

HTTP를 사용해서 프로그램끼리 소통하는 HTTP API가 있습니다. 누구나 제한 없이 사용 가능한 public API도 있습니다.


  1. RESTful API의 제약 조건은?

첫째, 클라이언트-서버 구조를 준수해야 합니다. 클라이언트는 서버의 URI만 알뿐 이 둘은 비의존적이어야 합니다. 둘째, 서버는 클라이언트의 상태를 저장해서는 안됩니다. 로그인 등의 세션 정보는 클라이언트만이 알고 있어야 합니다. 셋째, 요청에 대한 응답에 해당 요청이 캐싱이 가능한지 가능하지 않은지의 정보를 포함해야 합니다. 넷째, 약속된 Interface를 준수해야 합니다. 다섯째, 계층화된 아키텍처여야 하며 각각의 계층은 마음대로 상호작용할 수 없습니다.


  1. URL 과 URI 는 어떤 차이가 있나요? 구분해서 사용하는 이유는?

URI는 특정 리소스를 식별하는 통합 자원 식별자입니다. URL은 컴퓨터 네트워크 상에서 리소스가 어디에 있는지를 알려주는 규약입니다. URL은 URI에 포함됩니다. 원하는 정보에 도달하기 위해서 URI이 유리한 상황도, URL이 유리한 상황도 있기 때문에 둘을 구분하여 사용합니다. 예를 들어서 www.google.com과 같이 서버의 위치를 나타낼 때에는 URL이면서 URI인 값을 사용하지만 서버의 자원을 나타낼 때에는 URI이지만 URL이 아닌 값을 사용하게 됩니다.


  1. HTTP 프로토콜에서 서버가 내려주는 응답코드 아는대로 말해주세요.

100번대는 정보 응답코드로 요청을 수신했으며 해당 요청을 처리하고 있음을 뜻합니다. 200번때는 성공 응답코드로 요청을 수신하고 처리했음을 뜻합니다. 300번대는 리다이렉션 응답코드로 요청을 위해 추가적인 조치가 필요함을 의미합니다. 400번대는 클라이언트 오류 응답코드로 요청의 문법이 잘못되었거나 요청을 처리할 수 없음을 의미합니다. 500번대는 서버 오류 응답코드로 요청은 유효하나 서버가 요청을 충족할 수 없음을 의미합니다.


  1. REST API 설계 시 규칙 아는대로 말씀해주세요.

첫째, URI를 통해 필요 자원의 위치를 명시해야 합니다. 둘째, 자원에 대한 행위는 HTTP 메소드를 사용하여 표현합니다.


  1. REST API의 URI를 설계하는 규칙을 말해보세요.

첫째, 소문자를 사용해야 합니다. 둘째, 언더바 대신 하이픈을 사용해야 합니다. 셋째, URI의 마지막에는 슬래시를 사용하지 않아야 합니다. 넷째, 계층관계는 슬래시 구분자를 사용하여 나타냅니다. 다섯째, 파일의 확장자는 URI에 포함시키지 말아야 합니다. 여섯째, 컨트롤 자원의 경우에는 동사형으로 그 외의 자원의 경우에는 명사형으로 작성합니다. 일곱째, 인스턴스가 하나더라도 복수형으로 작성합니다.


  1. 무상태성(stateless)의 예시로 실제로 사용되는 거 알고 계신거 있으신가요?

무상태성은 서버가 클라이언트의 상태를 보존하지 않는 것을 의미합니다. REST api의 모든 통신은 무상태성을 충족한 채로 이루어집니다. 예를 들어 웹사이트의 로그인 정보는 서버에 저장되지 않습니다.


  1. 실제로 프로젝트 진행하셨을 때 REST API 적용하신 예시 하나 들어주세요. 어떤 API이고, 어떤 메소드를 사용했고, 해당 URL은 무엇인지 말씀해주시면 됩니다.




References

REST API 제대로 알고 사용하기

RESTful API란 무엇인가요?

[Network] REST란? REST API란? RESTful이란?

GET vs POST

[HTTP] HTTP Method 정리 / GET vs POST 차이점

http 메소드와 상태코드

Http Method 란? (GET, POST, PUT, DELETE)

HTTP Request 정리

URI랑 URL 차이점이 뭔데?

PATCH 메서드가 멱등이 아닌 이유

루프백 테스트 란 무엇입니까? -techopedia에서 정의

HTTP 상태 코드 정리

7 Rules for REST API URI Design

이미지 출처1