본문 바로가기
IT 정보

RESTful API

by 완기 2020. 8. 17.
728x90
반응형

요새 국비지원 교육과정을 마치고 구직활동을 하면서 RESTful API 경험자 혹은 설계 경험 등을 우대사항으로 내놓는 기업이 상당히 많았다.

 

나 또한 REST라는 말은 많이 들어봤지만 막상, 설명을 할 수 없을 정도의 수준이어서 오늘 본격적으로 찾아보기로 했다.

 


REST의 탄생 배경

 

1991년 팀 버너스 리에 의해 WEB이 탄생되고

 

인터넷에서 정보 공유 방법을 고민하던 팀 버너스 리는  HTML의 표현방식, URI를 이용한 식별자 , HTTP 프로토콜을 이용한 전송으로 답을 내렸다.

 

그리고 로이 필딩이라는 대학원생이 HTTP1.0 버전에 참여하면서 WEB의 규약은 지키면서 HTTP를 발전시킬 수 있을까 고민하다가 나온 것이 REST의 시작이다.

 

2000년 로이 필딩이 MS에서 발표한 박사 논문 제목이 "네트워크 기반 소프트웨어의 설계 스타일, 디자인"이다.

 

로이 필딩이 말하기로 REST는 분산 하이퍼 미디어 시스템을 위한 아키텍처 스타일이다.라고 한다.

 

REST는 아키텍처 스타일이고 이는 곧 제약 조건의 집합이다. 

 

제약조건은 다음과 같다.

 

1. 클라이언트 - 서버

2. 무상 태성

3. 캐시

4. 유니폼 인터페이스

5. 계층 시스템

6.code on demand(옵션)

 

이러한 제약 조건들로 미루어 보았을 때,

REST의 탄생 이유는 "서버의 기능이 변경되어도, 클라이언트는 업데이트할 필요가 없다."

 

 


REST 예시

HTTP 메소드는 GET, POST , PUT , DELETE가 있는데, 

이 4가지의 메소드로 리소스에대한 CRUD를 명시하는데 있다.

 

예를 들어 /member 라는 URI가 존재한다고 가정하면

 

GET 방식의 /members     =>   member list를 가져옴  (Read)

 

GET 방식의 /member/:id     =>   특정 id를 가진 member를 찾음 (Read)

 

POST 방식의 /member    =>  member를 생성

 

PUT 방식의 /member  => member의 정보를 업데이트 (Update)

 

DELETE 방식의 /member => member의 정보를 삭제 (Delete)

 

등과 같이 CRUD 연산을 한다.

 


REST 장,단점

 

 

장점

1. REST메세지를 읽는 것으로 의도를 명확하게,쉽게 해석이 가능하다.

2.HTTP와 동일한 인프라를 사용하여, 별도의 인프라 구축이 필요가 없다.

3. HTTP의 규약만 지키면 다양한 플랫폼에서 동작이 가능하다.

4. 헤더에 URI 처리 메소드를 명시해서 필요한 데이터를 바디에 표현할 수 있도록 제공, xml,json등 다양게 작성되고 헤더 표현이 간결해지면서 가독성 향상

 

단점

1.메소드의 형태가 제한적이다. 

2.표준이 존재하지 않는다.

 


REST 설계 규칙

 

1.URI는 정보의 자원을 표현

   1-1 동사보다 명사, 대문자보다 소문자

   1-2 문서의 이름으로 단수 명사 사용.

   1-3 컬렉션 이름으로는 복수 명사 사용

ex:) GET /Member/1      ->     GET /members/1

 

2.자원에 대한 행위는 HTTP method로 표현

  2-1 URI에 method가 들어가면 안됨

         ex:) GET /members/delete/1  (x)

   2-2 URI에는 동사표현이 들어가면 안됨.

         ex:) GET /members/show/1  (x)

   2-3 URI 경로 중, 변하는 부분은 유일한 값으로 대체

         ex:) DELETE /members/delete/12   -> 12번 멤버 삭제

 

3.슬래시(/)는 계층 관계를 나타내는데 사용

4.URI 마지막에 /(슬래시)를 포함하지 않는다. -> 혼동을 방지하기 위해

5. URI가 불가피하게 길어진다면 - (하이픈)을 이용하여 가독성을 높인다.

6. _ (언더바)는 사용하지 않는다 -> 가끔 문자를 가리는 경우가 있어 혼동 발생 가능성이 생김.

7.URI는 소문자로 작성한다.

8.파일 확장자는 URI에 포함하지 않는다.

9.리소스간에 연관간계가 있는 경우

   9-1  ex:) GET /members/12/devices  (12번 멤버가 가진 디바이스들)

728x90
728x90

댓글