요 근래 IOT 분야 및 산업 전반적으로 많이 사용되고 있는 프로토콜인 REST API에 대해 알아보겠습니다
HTTP 프로토콜을 이용해서 통신하던 개발자들에게는 좀 생소할 수 있지만 REST API의 개념을 알고
이해하게 되면 결국은 HTTP 프로토콜 위에서 움직이고 범용성 측면에서 더 편리하기 때문에
웹 개발을 하는 개발자라면 트렌드에 맞는 개념을 반드시 공부해야 합니다.
REST API 기본 개념
REST API란 Representational State Transfer의 약자로 자원을 이름으로 구분하여
해당 자원의 상태를 주고받는 모든 것들을 의미합니다
처음에 자원을 이름으로 구분한다는 것이 좀 생소했는데 간단하게 말해서 mqtt의 토픽과 같은 개념입니다
예를 들어서 우리나라(Korea)에 학교(School)가 있고 그중에 고등(High) 학교를 선택한다고 하면
다음과 같은 경로로 표현이 가능합니다
/Korea/School/High
이 부분이 바로 접근하고자 하는 자원을 이름 카테고리별로 구분하여 지정하는 것인데
만약 여기에서 접근하는 서버의 주소가 http://123.234.456.789 라고 한다면
REST API를 통해 고등학교의 정보로 접근하는 url은 다음과 같이 사용됩니다
http://123.234.456.789:8080/Korea/School/High
즉 서버측에서는 자원을 이런 식으로 카테고리를 만들어서 접근하는 데이터의 정보를 전달합니다
대부분 REST API는 JSON또는 XML 포맷을 이용해서 통신하는데 JSON이 대표적입니다
REST API는 HTTP URI (Uniform Resource Identifier)를 통해 자원을 명시하고 HTTP Method를 이용해
해당 자원에 대한 CRUD Operation을 적용합니다.
여기에서 HTTP Method란 POST, GET, PUT, DELETE를 의미합니다
즉 HTTP Method에 따라서 자원에 접근해서 동작하는 방식을 정의할 수 있습니다
POST : 생성
GET : 조회
PUT : 수정
DELETE : 삭제
HEAD : header 정보 조회
장단점
REST API의 장점으로는 HTTP Protocol을 그대로 사용하기 때문에 별도의 인프라를 구축할 필요가 없다는 것이며
HTTP Protocol의 표준을 최대한 활용해 여러 추가적인 장점을 함께 공유할 수 있습니다
즉 HTTP Protocol을 이용하는 모든 플랫폼에서 별도의 구축 없이 사용이 가능하다는 게 가장 큰 장점입니다
이러한 강력한 장점에도 불구하고 단점은 존재하기 마련인데 REST API는 표준에 대한 정의가 없습니다
또한 사용할 수 있는 방식이 HTTP Method를 이용하기 때문에 POST, GET, PUT, DELETE 4가지로 제한적입니다
또한 구형 웹브라우저의 경우에는 PUT, DELETE를 지원하지 않아 사용하지 못하는 경우가 있습니다
설계 규칙
1. 슬래시(/)는 구분자로 계층관계를 표현합니다
2. URL 마지막 문자에는 슬래시(/)가 포함되지 않습니다
즉 위에서 설명한 것과 같이 http://123.234.456.789:8080/Korea/School/High/ 는 적절하지 않으며
http://123.234.456.789:8080/Korea/School/High 로 마지막에 슬래시를 제외합니다
3. 하이픈(-)은 URI 가독성을 높이는데 사용할 수 있습니다
4. 밑줄(_)은 URI에 포함하지 않습니다
5. URI 경로는 소문자로 구성합니다
6. 파일의 확장자는 URI에 포함하지 않습니다
http://123.234.456.789:8080/Korea/School/High.jpg 확장자를 포함하는 경우에는 에러를 발생합니다
간단하게 REST API에 대해 테스트를 해볼 수 있는 방법으로는 포스트맨을 사용하여
공개 구성된 REST API 서버로 통신을 해보는 것입니다
다음 포스팅에서 포스트맨을 통한 REST API 테스트 방법에 대해 정리해 두었습니다
2022.09.20 - [기타] - [POSTMAN] 포스트맨 사용법 (REST API 테스트)
'서버 > 서버이론' 카테고리의 다른 글
리액트로 만드는 서버 (2) | 2023.10.29 |
---|---|
[서버] 간단한 소켓 테스트 서버 만들어보기 (2) | 2022.09.21 |
[Server] 리눅스 소켓이란? (7) | 2022.01.13 |
[Server] 트랜잭션이란? (4) | 2022.01.07 |
[Server] 로드 밸런싱이란? (0) | 2022.01.03 |
댓글