본문 바로가기

웹 개발

REST와 RESTful API

REST란 Representational State Transfer의 약자로 sw 개발의 아키텍처의 한 형식이다.  (자원의 대표에 의한 상태전달)

자원의 대표란?

-자원이란 SW가 관리하는 모든것. 문서,그림,데이터,SW도 가능. (EX- DB에 학생 명부가 저장되어 있다고 한다면 이 학생들의 정보가 자원). 자원의 대표의 의미는 그 자원을 대표하기 위한 이름을 뜻한다.한 학생 데이터를 얻으려면 대표이름(학생)과 한 학생을 특정할 수 있는 값(ID)가 필요한다. 

 

상태전달이란?

-데이터가 요청되어지는 시점에서 자원의 상태(정보)를 전달하는것. 

 

일반적으로 REST 라고 하면 좁은 의미로 HTTP를 통해 CRUD를 실행하는 API를 뜻한다. 

HTTP프로토콜을 이용하기 때문에 URL(route)를 통해 자원을 특정 짓고(http verbs)를 통해 할일(crud)를 지정한다. json, xml를 통해 데이터를 주고 받는 것이 일반적이다.

 

rest를 정의하기 위한 조건

'클라이언트-서버'구조: 자원이 있는 쪽이 서버가 되며, 요청을 하는 쪽이 해당 서버에 대한 클라이언트가 된다.

무상태: 서버는 각각의 요청을 완전히 별개의 것으로 인식하고 처리해야햐며, 이전 요청이 다음 요청의 처리에 연관되어서 안된다. 세션을 사용하면 안된다. 

캐쉬 처리 가능: 대량의 요청을 효율적으로 처리하기 위해 캐시가 요구된다.

계층화, 인터페이스 일관성

 

 

RESTful

RESTful은  REST의 비공식적인 구현 가이드이다. 

crud      -  http  verbs      -route

resource들의 목록표시               -  GET          - /resource

resource 하나의 내용을 표시        - GET          - /resource/:id

resource를 생성                        - POST        - /resource

resource를 수정                        - PUT          - /resource/:id

resource 를 삭제                       - DELETE      - /resource/:id

 

예제

 

student resource이다.

  "id": 1,

  "firstName" : "kario",

   "lastName": "Yang",

   "classes" : [

      {"id" : 1, "name": "a"},

      {"id" : 2, "name": "b"},

      {"id" : 3, "name": "c"},

      ] }

 

이러한 데이터를 db에 생성 ,호출, 수정,삭제   (create,read,update,delete) crud 라우트.

 

POST/student: 새 student를 등록

GET/student: 전체 student list를 호출

GET/student/1 :1번 student를 호출

PUT/student/1 : 1번 student의 정보를 수정

DELETE/student/1 : 1번 student의 정보를 삭제

 

검색을 하기 위해서는 query를 사용한다. url을 통해 전달 되는 정보들을 query라고 한다. url 뒤에 ?를 붙인 후 query를 전달하며, 하나 이상의 query를 전달하기 위해서는 &을 붙인다. 성이 yang인 학생을 검색하는 api주소는 GET/student?lastName=yang

 

get은 request body를 보낼 수 없고 나머지는 보낼 수 있다. 

 

RESTful API의 장점

- 정해진 규칙대로  routing 주소를 만들기 때문에 route 이름을 짓는 수고를 덜 수 있고 통일성이 있다.

-api 확장이 쉽다. 학생 api에서 과목을 관리하는 api를 추가하는 경우, post students/:id/classes , delete students/:id/classes/:id 와 같이 만들 수 있다. 

 

 

 

'웹 개발' 카테고리의 다른 글

CRUD 와 7Standard Actions  (0) 2020.06.25
JWT  (0) 2020.06.25
API  (0) 2020.06.25
웹팩  (0) 2020.06.21
NPM  (0) 2020.06.20