Restful이 대체 뭘까? [미완성]

pixelstudio·2021년 3월 2일
0

HTTP

목록 보기
1/3

RESTful?

RESTful하다는게 뭔소리인지 몰라서 많이 해맸고 막 들으면 어지러워진다. 하지만 반드시 필요한 개념중 하나라고 생각해서 찾아보게 되었다...

CRUD Opration

Create(생성): POST
Read(조회): GET
Update(수정): PUT
Delete(삭제): DELETE
HEAD(Header 정보조회): HEAD

REST(Representational State Transfer)는 월드 와이드 웹(WWW)과 같은 분산 시스템 설계를 위한 하나의 방법론으로 소프트웨어 아키텍쳐중 하나이다.

REST 구성 요소
자원(Resource),HTTP URI
모든 자원은 Server에 있고, 고유한 ID를 가진다. 이 자원을 구별하는 ID는 /Group/:id와 같은 HTTP URI다. 클라이언트는 URI를 이용해 각 상태를 조작하기 위해 요청을 보낸다.

행위(Verb),HTTP Method
HTTP 프로토콜의 메소드를 사용하며, GET, POST, PUT, DELETE 등 여러 메소드를 제공한다.

표현(Representation of Resource)
클라이언트가 자원의 상태 조작을 요청하면, 서버는 JSON, XML, TEXT, RSS등 여러 형태의 응답(Representation)을 보내게 된다. 요즘은 JSON이나 XML을 주로 쓴다.

왜 REST 방식을 써야할까?

다양한 클라이언트의 등장
Web 브라우저말고도 안드로이드, 아이폰과 같은 모바일 디바이스에서도 통신을 할 수 있어야한다.

애플리케이션 분리 및 통합
RESTful API를 사용하면, 어떤 다른 모듈 또는 애플리케이션 끼리 상호간 통신을 할 수 있게된다.

REST 제약 조건

인터페이스 일관성(Uniform Interface) : URI로 지정한 리소스에 대한 조작을 한정적인 인터페이스로 수행하는 아키텍쳐 스타일을 말한다

무상태(stateless) : REST는 기본적으로 무상태성이며, 상태 정보를 따로 저장하고 관리하지 않는다. 여러 정보를 관리하지 않기 때문에 API 서버는 단순히 요청만 처리하면 된다.

캐시 처리 가능(Cacheable) : REST의 가장 큰 특징으로서 HTTP라는 기존 웹표준을 그대로 사용하기 때문에, 웹에서 사용하는 기존 인프라를 그대로 활용이 가능하다. LAST-Modified태그나 E-Tag를 이용하면 캐싱 구현이가능하다.

계층화(Layered System) : REST서버는 다중 계층으로 구성될 수 있다.
클라이언트/서버 구조(S/C structure) : 역할이 확실히 구분되어 있다. 자원을 가진 쪽이 Server, 요청하는 쪽이 Client

REST API란?

API(Application Programming Interface)
응용 프로그램에서 사용할 수 있도록, 운영체제나 프로그래밍 언어가 제공하는 기능을 제어할 수 있게 만든 인터페이스를 뜻한다. 예를 들면 A라는 프로그램에서 정리하면 B라는 프로그램에서 상호작용 하여 요청된 값을 전달한다. API는 프로그램들이 서로 상호작용 하는 것을 도와주는 역할을 한다.

REST API는?
REST 기반으로 서비스 API를 구현한 것이다. 예를 들면 구글 맵, 공공 데이터, 마이크로 서비스등을 제공하는 업체 대부분은 REST API를 사용한다.

REST API 설계 규칙

resource의 원형
Document : 객체 인스턴스나 DB 레코드와 유사한 개념
Collection : 서버에서 관리하는 디렉터리 라는 리소스
Store: 클라이언트에서 관리하는 리소스 저장소

첫번째, URI는 정보의 자원을 명사로 표현해야한다.
두번째, 자원에 대한 행위는 HTTP Method로 표현한다.

자세히 알아보자
URI 설계시 주의

  1. 슬래시(/)는 계층 관계를 나타낼 때 사용한다.
https://restapi.example.com/lego/starwars
https://restapi.example.com/pinter/raser
  1. URI 마지막에는 슬래시(/)를 포함하지 않는다.
https://restapi.example.com/lego/starwars/ 이거안됨
https://restapi.example.com/pinter/raser 이거됨
  1. 가독성을 위해서 ()대신 하이픈(-) 을 사용한다.
    밑줄(
    )은 보기 어렵거나 문자가 가려지기도 한다. URI를 쉽게 읽고 해석하기 좋게 하거나, 불가피하게 길다면 가독성을 위해 하이픈(-)을 사용하도록하자.

  2. 파일 확장자는 URI에 포함시키지 말아야한다. 확장자를 사용하기 위해선 Accept header를 사용하자.

GET / group/team-a/screen-shot/a385/images HTTP/1.1 Host: my.example.com Accept: image/png

POST : POST를 통해 URI를 요청하면 리소스를 생성한다.

POST /group

GET : GET을 통해 해당 리소스를 조회한다.

하나만 조회

GET /group/team-a

전체 조회

GET /group/

PUT : PUT을 통해 해당 리소스를 수정한다.

PUT /group/team-a

DELETE : DELETE를 통해 리소스를 삭제한다.

DELETE /group/team-a

응답상태코드

100 ~ : 전송 프로토콜 수준의 정보 교환
200 ~ : 클라이언트 요청이 성공적으로 수행됨
300 ~ : 클라이언트는 요청을 완료하기 위해 추가적인 행동을 취해야 함
400 ~ : 클라이언트의 잘못된 요청
500 ~ : 서버쪽 오류

최종적으로 RESTful을 알아보자

RESTful

일반적으로 REST라는 아키텍처를 구현하는 웹서비스를 나타내기 위한 용어이다.

RESTful은 REST를 REST답게 쓰기 위한 방법이다.

RESTful의 목적
이해하기 쉽고 사용하기 쉬운 REST API를 만들기 위함

근본적인 목적이 성능 향상이 아닌 API의 이해도 및 호환성을 높히는 것이 주 동기이다.

최종적으로 RESTful이란 위는 의 REST, 제약조건의 집합(아키텍쳐 스타일, 원칙)을 모두 만족하도록 설계하는 API를 의미한다.

출처1
출처2
출처3
출처4

profile
프론트엔드 개발자를 목표로 학습하며 스스로 디벨롭중입니다. 추후엔 백엔드를 제대로 학습할 예정입니다.

관심 있을 만한 포스트

0개의 댓글