
REST 는 REpresentationl State Transfer의 약자로 자원을 이름으로 구분해서
해당 자원의 상태를 주고받는 것을 의미한다.
URI를 통해 자원을 명시하고, HTTP 메소드(POST, GET, PUT, DELETE, PATCH 등)를 통해
명시된 해당 자원에 대한 *CRUD 작업하는 것을 의미한다.
*CRUD
create: 생성(POST)read: 조회(GET)update: 수정(PUT, PATCH)delete: 삭제(DELETE)
API 는 Application Programming Interface의 약자로 컴퓨터나 프로그램 사이의 연결을 뜻한다.
일종의 소프트웨어 인터페이스이며 다른 소프트웨어에 서비스를 제공한다.

예를 들면 API는 식당에서 점원이 주문받아 주방(시스템)에 전달하고 고객이 요구한 메뉴(데이터)를 제공하는 것과 비슷하다. 이 과정에서 점원은 명시된 메뉴(API의 규격)만 주문받을 수 있다.
즉, API 는 소프트웨어 혹은 애플리케이션 간에 정보를 주고받는 데 필요한 규약이며 이를 통해
서로 다른 소프트웨어나 서비스가 상호작용하며 데이터를 주고받을 수 있다.
- 간단한 인터페이스를 제공하여 개발자들이 쉽게 이해하고 사용할 수 있다.
- 자원 중심적이고 *Stateless한 특성으로 확장성이 뛰어나다.
- URI를 통해 자원을 식별하므로 API의 재사용 가능성을 높여준다.
- 캐시 처리가 가능하여 동일한 요청에 대해 중복 작업을 피하고 성능을 최적화할 수 있다.
*Stateless : 서버가 클라이언트의 상태를 저장하지 않는 것
- 자원(Resource) : HTTP URI
/users, /products/123- 자원에 대한 행위(Verb) : HTTP Method
GET, POST ...- 자원에 대한 행위의 내용 (Representations) : HTTP Message *Pay Load
img-1, img-2- REST API 구성요소가 실제로 HTTP 통신 구조에서 어떻게 위치하는지 궁금하다면?
참고 : HTTP Request/Response의 구조
img-1img-2
*Pay Load : HTTP 요청 또는 응답에서 전송되는 실제 데이터(HTTP header, JSON, XML ...)
- 대문자보다는 소문자 사용
../Run -> ../run- 마지막에 슬래시 포함하지 않음
../test/ -> ../test- 동사보다는 명사 사용
../testing -> ../test- 언더바 대신 하이픈(-, hypen) 사용
../run_test -> ../run-test- 확장자는 URI에 포함하지 않음
../apple.jpg -> ../apple- 행위를 포함하지 않음
../update-post/1 -> ../post/1
- 자원 식별 : 각 자원은 고유한 URI를 가져야 한다. URI는 클라이언트가 자원을 식별하고 접근하기 위한 주소로 사용된다.
- 표현의 분리 : 자원의 표현(Representation)과 행위(Action)를 분리해야 한다.
- HTTP 메소드 사용 : 올바른 HTTP 메소드를 사용하여 각 자원에 대한 행위를 정의해야 한다. 일반적으로 GET(조회), POST(생성), PUT(갱신), DELETE(삭제) 메소드가 사용된다.
- 상태를 관리하지 않음 :
REST는 Stateless한 아키텍처 스타일이기 때문에 서버는 클라이언트의 상태를 관리하지 않는다. 이전 요청에서의 상태 정보를 기억하거나 관리하지 않아야 한다.
- 적절한 HTTP 상태 코드 사용 : 클라이언트에게 요청의 성공 또는 실패를 전달하기 위해 적절한 HTTP 상태 코드
(200, 201, 202, 204, 400, 404 ...)를 반환해야 한다.
일반적으로 REST 의 아키텍처 스타일을 따르는 API를 REST API 혹은 RESTful API 라고 표현한다.
같은 의미이므로 아 다르고 어 다르다 마음에 드는 단어를 선택해서 쓰면 될 것 같다.
출처 및 참고자료:
https://eun-jee.com/post/web/RESTful_API/
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
https://www.incodom.kr/REST
https://img1.daumcdn.net/thumb/R1280x0.fjpg/?fname=http://t1.daumcdn.net/brunch/service/user/8kCc/image/KqPoc0TbVmKlZi1ldFCyfNR0Kao.jpg
https://res.cloudinary.com/practicaldev/image/fetch/s--YTDTEgpk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/ekawmj3rafdtn06hzj79.png
https://gmlwjd9405.github.io/images/network/restapi.png
https://chat.openai.com/
https://engineerinsight.tistory.com/47