REST API 알아보기

old_dorim·2022년 10월 7일
0

네트워크와 API

목록 보기
1/3
post-thumbnail

REST API가 뭔가요?

개발하는 입장에선 요청과 응답 컨벤션이다. 다만 많은 프레임워크가 여기에 맞춰져서 짜여있어서 프레임워크 쓰다보면 여기저기 강제되는 부분들이 많다.

용어 구분이 곤란해서 간단한 개요를 말하고 들어가겠다. REST, REST API, RESTful API가 살짝 다르다.

REST

Representational State Transfer
소프트웨어 아키텍처. 복잡한 네트워크에서 통신을 관리하기 위한 지침이다.

REST API

그 규칙에 맞춰 구현한 API이다.

RESTful API

그 규칙에 맞게 잘 구현된 '웹' API를 특히 이렇게 불러준다. REST API와 RESTful API는 굳이 구분해서 생각할 필요는 없다.


REST

REST 설계 규칙

Uniform Interface 균일한 인터페이스

URI로 지정한 리소스에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다. 어떤 걸 전송하든 표준 양식을 가지라는 것이다. 어떤 표준 양식이냐면

  1. 요청이 자원(리소스)이 뭔지 표현할 수 있는 양식.

  2. 클라이언트가 리소스를 자유롭게 사용할 수 있도록 서버가 충분한 정보를 제공하는 양식. 수정, 삭제를 위한 정보, 요청을 어떻게 보내하는지, 자원을 어떻게 쓰는 게 좋은지 정보를 제공한다. 메타데이터, 설명 메세지 등.

Statelessness 무상태

모든 요청이 독립적이다. 나는 순수 함수가 생각났다. 이전의 요청은 다음에 요청에 영향을 끼치지 않는다. 그걸 위해 상태 정보를 따로 저장하거나 관리하지 않는다. 구현이 쉬워지고 처리가 단순해진다.

계층화 시스템

서버가 다시 서버에게 요청을 보내고, 프록시 서버를 두거나 하는 등의 요청이 자유롭다. 그래서 여러 계층을 나눠서 여러 서버에서 실행되도록 나눌 수가 있다. 웹서버(정적 파일 서버), API 서버로 나눈다거나. 이 계층은 클라이언트 입장에선 보이지 않는다.

Cacheable 캐시

캐시 구현이 가능해야한다. 뭘 캐싱할지 표현할 수 있어야한다. RESTful 웹 서비스는 캐시 옵션으로 API 응답을 사용하여 캐싱을 제어한다.

온디맨드 코드

서버에서 클라이언트에 코드가 삽입되도록 보낼 수가 있다.


REST API

그렇다면 이런 규칙에 맞추기 위하여, 어떤 요청을 보내고 어떤 응답을 보내도록 양식을 짜야할까?(요청이 할 게 많아보임)

요청

클라이언트->서버 요청은 어떤 양식으로 어떤 정보를 보내야하는가?

고유 리소스 식별자

어떤 자원인지 말해주기

URL(Uniform Resource Locator)을 사용하여 리소스 식별을 수행한다. 리소스에 대한 경로를 지정하는 것이다. URL은 웹페이지를 방문하기 위해 브라우저에 입력하는 웹 사이트 주소와 유사하다. 요청 엔드포인트라고도 하며 클라이언트가 요구하는 사항을 서버에 명확하게 지정한다.

컨트롤러에 ~~~/user 같은 부분이 있고, 요청을 보낼 때 이를 명시하며, 이는 리소스를 식별할 수 있는 표현이여야 한다는 것이다.

메서드

이 자원으로 뭐하는지 말해주기
자원으로 뭘할 건지 말해줘야 한다.

HTTP 프로토콜에서는 리소스가 뭘 작업할지 구분하는 메서드를 제공한다.

GET-자원에 접근
POST-자원을 생성
PUT-자원을 업데이트
DELETE-자원을 제거

뭐... PATCH도 있고... 더 있다...

헤더

자원의 메타 데이터
응답의 형식을 나타내고 요청 상태 등에 대한 정보를 제공한다.
헤더의 content-type등이 데이터가 어떤 타입인지 제공하는데, 이런 친구들이다.

데이터

당연히 데이터가 갈텐데, 이 데이터는 메소드에 맞춰 잘 실행되도록 보내줘야한다.

파라미터 Parameters

패스로 표현되는 params(앤드 포인트랑 비슷하지 않나?)
query
인증에 쓰는 cookie
등으로 서버에 정보를 제공한다.


응답

상태 표시줄

요청이 어떻게 처리 됐는지에 관한 번호
100번대-하는중
200번대-OK
400번대-클라이언트가 잘못 요청함
500번대-서버가 처리를 못함ㅠㅠ
등으로 요청이 어떻게 처리 됐는지를 표현하는 번호가 있다. 이걸 응답에 보내줘야한다.

메시지 본문

적절한 표현 형식을 선택
요청 헤더에 포함된 내용을 기반으로 적절한 표현 형식을 선택하여 보낸다. json이나 xml 형식 등을 사용한다.

헤더

자원의 메타 데이터
응답에 대한 추가 컨텍스트를 제공하고 서버, 인코딩, 날짜 및 콘텐츠 유형과 같은 정보를 포함한다.

참고 자료

https://aws.amazon.com/ko/what-is/restful-api/

profile
미래엔 햄스터를 다운 받을 수 있겠지? 설치류니까...

0개의 댓글

관련 채용 정보