1. REST
1) REST 개념
- Representational State Transfer
- 자원의 이름으로 구분하여(URI 사용) 해당 자원의 상태(CRUD)를 적용하는 것
- 웹 사이트의 이미지, 텍스트, DB 내용 등의 모든 자원에 고유한 ID인 HTTP URI를 부여
- ⑴HTTP URI(Uniform Resource Identifier)를 통해 자원(Resource)을 명시
- HTTP Method(POST, GET, PUT, DELETE, PATCH 등)를 통해
- 해당 ⑵자원(URI)에 대한 ⑶CRUD Operation을 적용하는 것
2) REST 구성요소
1. 자원(Resource): HTTP URI
- 모든 자원에 고유한 ID가 존재하고, 이 자원은 Server에 존재한다.
- 자원을 구별하는 ID는 ‘/groups/:group_id’와 같은 HTTP URI 다.
- Client는 URI를 이용해서 자원을 지정한다.
- 해당 자원의 상태(정보)에 대한 조작을 Server에 요청한다.
2. 행위(Verb): HTTP Method
- HTTP 프로토콜의 Method를 사용한다.
- HTTP 프로토콜은 GET, POST, PUT, DELETE 와 같은 메서드를 제공한다.
3. 표현 (Representations) : HTTP Message Pay Load
- Client가 자원의 상태(정보)에 대한 조작을 요청하면 Server는 이에 적절한 응답(Representation)을 보낸다.
- REST에서 하나의 자원은 ⑷JSON, XML, TEXT, RSS 등 여러 형태의 Representation으로 나타내어 질 수 있다.
- JSON 혹은 XML를 통해 데이터를 주고 받는 것이 일반적이다.
3) REST 특징
- Server-Client(서버-클라이언트 구조)
- 자원이 있는 쪽이 Server, 자원을 요청하는 쪽이 Client가 된다.
- REST Server: API를 제공하고 비즈니스 로직 처리 및 저장을 책임진다.
- Client: 사용자 인증이나 context(세션, 로그인 정보) 등을 직접 관리하고 책임진다.
- 서로 간 의존성이 줄어든다.
- Stateless(무상태)
- HTTP 프로토콜의 인프라를 그대로 사용하기 때문에 Stateless Protocol이므로 REST 역시 무상태성을 갖는다.
- Client의 context를 Server에 저장하지 않는다.
->세션과 쿠키와 같은 context 정보를 신경쓰지 않아도 되므로 구현이 단순해진다.
- Server는 각각의 요청을 완전히 별개의 것으로 인식하고 처리한다.
- 각 API 서버는 Client의 요청만을 단순 처리한다.
즉, 이전 요청이 다음 요청의 처리에 연관되어서는 안된다.
- 물론 이전 요청이 DB를 수정하여 DB에 의해 바뀌는 것은 허용한다.
- Server의 처리 방식에 일관성을 부여하고 부담이 줄어들며, 서비스의 자유도가 높아진다.
- Cacheable(캐시 처리 가능)
- HTTP가 가진 가장 강력한 특징 중 하나인 캐싱 기능을 적용할 수 있다.
- HTTP 프로토콜 표준에서 사용하는 Last-Modified 태그나 E-Tag를 이용하면 캐싱 구현이 가능하다.
- 캐시 사용을 통해 응답시간이 빨라지고 REST Server 트랜잭션이 발생하지 않기 때문에 전체 응답시간, 성능, 서버의 자원 이용률을 향상시킬 수 있다.
- Layered System(계층화)
- REST Server는 다중 계층으로 구성될 수 있다.
- API Server는 순수 비즈니스 로직을 수행하고 그 앞단에 보안, 로드밸런싱, 암호화, 사용자 인증 등을 추가하여 구조상의 유연성을 줄 수 있다.
또한 로드밸런싱, 공유 캐시 등을 통해 확장성과 보안성을 향상시킬 수 있다.
- PROXY, 게이트웨이 같은 네트워크 기반의 중간 매체를 사용할 수 있다.
- Code-On-Demand(optional)
- Server로부터 스크립트를 받아서 Client에서 실행한다.
반드시 충족할 필요는 없다.
- Uniform Interface(인터페이스 일관성)
- URI로 지정한 Resource에 대한 조작을 통일되고 한정적인 인터페이스로 수행한다.
- HTTP 표준 프로토콜에 따르는 모든 플랫폼에서 사용이 가능하다.
2. REST API
1) REST API 개념
-
API : Application Programming Interface
- 응용프로그램과 운영체제 간의 통신을 연결해주는 인터페이스
- 예를 들어 명령어 창에 "Hello, world!" 라는 문자열을 출력하는 프로그램을 C언어로 작성할때, 당연히 텍스트로 출력하는 printf API를 사용하여 printf("Hello, World!"); 라고 작성하게 될 것이다. 이는 윈도우, 리눅스, 유닉스, OS X 모두에서 동일하게 동작하도록 C언어 API가 보장해준다. 이 'printf'라는 것은 API를 기반으로 설계된 문법이며 이런 것들이 여러개 쌓여 '라이브러리'가 된다.
-
REST API : REST의 원리를 따르는 API
2) REST API 설계 규칙
슬래시 구분자(/ )는 계층 관계를 나타내는데 사용한다.
ex) http://restapi.example.com/houses/apartments
URI 마지막 문자로 슬래시(/ )를 포함하지 않는다.
Bad Example http://velog.com/test/
Good Example http://velog.com/test
언더바 대신 하이픈(-) 사용
Bad Example http://velog.com/test_blog
Good Example http://velog.com/test-blog
동사 대신 명사를 사용
BAD Example http://velog.com/members/show/1
GOOD Example http://velog.com/members/1
URI에서 CRUD 나타내는 것은 사용X
BAD Example http://velog.com/members/delete/1
GOOD Example http://velog.com/members/1
소문자 사용
BAD Example http://velog.com/Members/7
GOOD Example http://velog.com/members/7
파일 확장자 포함X
Bad Example http://velog.com/photo.jpg
Good Example http://velog.com/photo
3. RESTful
1) RESTful 개념
- REST 원리를 따르는 시스템은 RESTful이란 용어로 불림
= ‘REST API’를 제공하는 웹 서비스를 ‘RESTful’이라고 함
2) RESTful 하지 않은 예
- Ex1) CRUD 기능을 모두 POST로만 처리하는 API
- Ex2) route에 resource, id 외의 정보가 들어가는 경우(/students/updateName)
주석
⑴자원 : 문서, 그림, 데이터, 해당 소프트웨어 자체 등
해당 소프트웨어가 관리하는 모든 것이다.
⑵HTTP : 텍스트 기반의 통신 규약으로 인터넷에서 데이터를 주고받을 수 있는 프로토콜이다.
이렇게 규약을 정해두었기 때문에 모든 프로그램이 이 규약에 맞춰 개발해서 서로 정보를 교환할 수 있다
양식으로 요청 받은 정보를 받고 요청한 자료를 얹어서 돌려준다.
하지만 HTTP는 상태를 저장하지 않는다라는 특징을 가지고 있다.
따라서 요청받은 서버는 요청한 클라이언트의 정보를 저장하지 않고 각각을 독립적으로 보고 있으므로, 1분전에 요청한 내용과 지금 요청한 내용은 서로 관계가 없다.
정보를 저장해야할 때는 "쿠키"와 "세션"과 "토큰"등을 이용한다.
⑶CRUD : Create(생성), Read(읽기), Update(갱신), Delete(삭제)를 의미
REST API에서는,
- Create -> 데이터 생성(POST)
- Read -> 데이터 조회(GET)
- Update -> 데이터 수정(PUT, PATCH)
- Delete -> 데이터 삭제(DELETE)
⑷JSON : 서버에서 클라이언트로 데이터를 보낼 때 사용하는 양식
사용하는 언어에 관계 없이 일정한 패턴을 지닌 문자열을 생성해 내보내면 클라이언트는 그를 해석해 데이터를 자기만의 방식으로 온전히 저장, 표시할 수 있음
참고자료
: https://hahahoho5915.tistory.com/54
: https://gmlwjd9405.github.io/2018/09/21/rest-and-restful.html
:https://khj93.tistory.com/entry/%EB%84%A4%ED%8A%B8%EC%9B%8C%ED%81%AC-REST-API%EB%9E%80-REST-RESTful%EC%9D%B4%EB%9E%80