제일 많이 찾아보았고, 검색해보고 읽어보아도 정확하게 와닿지 않았던 개념이다.
항상 읽고나면, 그래서 그게 뭔데..? 라는 의문이 들었던..내용이다.
채용공고에 항상 우대사항이나 필수사항에 [REST API사용가능자./ 사용해본 자]라고 되어있어 찾아 보았다.
항상 궁금할때 읽어보고 스스로 정리를 하지 않아 금방 잊는거 같아.
이번 기회에 정리를 하고자 하나하나 정리해 보겠다.
REST API란?
REST를 기반으로 만들어진 API이다.
1) REST란?
URI(Uniform Resource Identifier)를 통해 자원을 명시하고, Method를 통해 해당 자원에 CRUD Operation을 적용하는것을 의미한다.
즉, 리소스를 어떻게 하겠다는것을 구조적으로 표현하는 방법이다.
더 쉽게 말하면 정보를 주고받기 위한 일종의 형식이다.
2) API란?
SW가 다른 SW로 부터 지정된 형식을 요청 및 명령을 받을 수있는 수단으로 과거 SOAP를 대체하기 위해 만들어 졌다.
※SOAP(Simple Object Access Protocol)은 일반적으로 널리 알려진 HTTP, HTTPS, SMTP 등을 통해 XML 기반의 메시지를 컴퓨터 네트워크 상에서 교환하는 프로토콜이다.
그럼 REST API를 왜 쓰는 것일까?
각 요청이 어떤 동작이나 정보를 위한 것인지, 그 요청의 모습 자체로 유추가 가능하다.
위에서 CRUD Operation 적용한다고 했다.
CRUD는
CREATE 생성
READ 조회
UPDATE 수정
DELETE 삭제 를 의미한다.
서버에 요청을 보낼때 HTTP라는 프로토콜 규약에 맞춰 신호를 전송한다.
위에서 말한 CRUD를 적용하기위한 메소드가 존재하는데
GET,POST,PUT,PATCH,DELETE가 존재한다.
여담으로 GET과 DELETE 보다는 POST,PUT,PATCH가 BODY가 있어, 더 안정적이고 많이 보낼수 있다.
※특정 용도가 정해져 있지는 않으나, 요청 의도를 쉽게 파악하기 위해 목적에 따라 구분되어있다.
그럼이제 위에서 질문한 REST API를 왜 쓰는 것일까? 에 대한 답이 나올 차례이다.
-> 각 요청이 어떤 동작이나 정보를 위한 것인지, 그 요청의 모습 자체로 유추가 가능하다.
이론상 목적에 따라 구분이 되어있어, 요청의 의도를 쉽게 알수있다고 하였다.
한가지 예로 하나하나 살펴보도록 하겠다.
GET은 READ를 할때 사용한다.
https://도메인/class/2/students -> 라는 도메인을 GET방식을 사용했다면, 2반의 학생들의 정보를 읽어올때 사용한다. 라는 유추가 가능하다.
POST는 CREATE를 할때 사용한다.
https://도메인/class/2/students -> 라는 도메인을 POST방식을 사용했다면, BODY부분에 어떠한 정보가 있을 것이다.
그럼 우리는 "2반 학생에 BODY의 정보를 추가하는 것이구나" 라고 유추가 가능하다.
PUT,PATCH는 UPDATE를 할때 사용한다.
https://도메인/class/2/students/index -> index를 가진 정보가 변경되었을 경우 index를 표시 해야한다.
이또한, BODY에 UPDATE할 정보를 같이 실어서 보낸다. 그럼 "아 정보가 수정 되는구나" 라고 유추가 가능하다.
보통 PUT과 PATCH는 구분하지 않지만, 굳이 구분을 하자면
PUT은 정보를 통째로 변경할때, PATCH는 일부 정보를 변경할때 사용한다.
※PUT과 PATCH는 index를 쓰고, POST는 index를 쓰지 않는다.
DELETE는 DELETE할때 사용한다.
https://도메인/class/2/students/index -> index를 표시해야한다. "해당 인덱스를 삭제하는 구나" 라고 유추 가능하다.
정리가 되었다.
그럼 위의 내용을 알고 있다는 가정하에 한줄로 표현을 하면
REST API는 HTTP요청을 보낼때, 어떤 URI에 어떤 메소드를 사용할지에 대한 약속
'CS지식' 카테고리의 다른 글
[신입 개발자 면접질문] 개발 면접 마지막으로 하고싶은말? (0) | 2022.01.21 |
---|---|
[네트워크 지식] Network 기본 지식 및 면접 예상 질문 (0) | 2022.01.19 |
[신입 개발자 면접 질문] 신입 개발자 면접 cs 준비 및 기본 용어 지식 (0) | 2022.01.18 |
[CS지식] 절차지향 vs 객체지향 (0) | 2021.07.01 |
[통신] Socket 과 HTTP 란? (0) | 2021.05.20 |