REST는 자원을 이름으로 구분해서 해당 자원의 상태를 주고받는 모든 것이다.
즉 URI로 자원을 명시하고 HTTP 메서드라는 행위를 통해 해당 자원(URI)에 대한 데이터를 처리하는 것이다.
API : 소프트웨어 응용 프로그램에서 다른 소프트웨어 구성 요소 또는 서비스와 상호 작용하기 위한 인터페이스를 제공하는 프로그래밍 기술.
예를 들어, 기상청의 소프트웨어 시스템에는 일일 기상 데이터가 들어 있습니다. 휴대폰의 날씨 앱은 API를 통해 이 시스템과 ‘대화’하여 휴대폰에 매일 최신 날씨 정보를 표시합니다.
Method : 동사로 어떤 행위를 할 것인지를 나타낸다.
REST API : Method + URI로 REST의 원리를 따르는 API이다.
RESTful하다는 것은 이해하기 쉽고 사용하기 쉬운 REST의 철학을 적용한 방식이다.
다수의 서버와 유저가 하나의 서버에 요청을 보낸다. 하나의 서버에 여러 요청을 받으면 큰 용량의 인스턴스 사용이 필요하다. 하지만 여유가 있을 때 하나씩 처리를 하기 때문에 대처가 가능하다.
프로그램 간 상호작용을 통해 정보를 통신하는 방식으로 REST API도 있지만 그래프 QL도 있다.
경로를 변수로 사용하는 것.
/post/5
http://naver.com/stocks
http://naver.com/stocks/samsung-electronics
https://www.example.com/category/cat/hello.html?key1=value1&key2=value2
? 이후부터 시작되는 부분을 쿼리 파라미터라 한다.
특정한 조건을 주고싶을 때 사용하는 매개변수 유형이다.
key-value 쌍으로 구성이 된다.
Path Variable은 id를 어떤 리소스를 식별하고 싶을 때 적절하고 Query Parameter는 필터링을 하거나 정렬을 하는 경우 사용하는 것이 적절하다.
URL : 사용자가 원하는 정보의 위치.
URI : 사용자가 원하는 정보를 식별하는 것.
ex) https://aaron.com/users/aaron/favorite-things = 장소 내 지정
URI 구성 : /collection/document(id)/store/ - 총 4 요소
Collection : Document의 상위 디렉토리 리소스, 복수형을 쓴다고 함. 서버가 관리. ex) people
Document : Collection 내 단일 리소스. 단일 개념(파일 하나, 객체 인스턴스) ex) Person
Store : Document의 특정 형태, 클라이언트가 관리
Controller - 표현 가능 Method를 제외한 행위 명시 - 필요에 따라 URI 마지막에 표현.
동사 사용.
즉 POST, PUT 같은 것일 때 메서드 의미를 강화하기 위한 것이라고 보면 됨.
ex)/people/12/register - 12번 사람에 대한 회원을 등록.
정리
~~.com/song/users/{id}/playlists/play
song -> document
users -> collection
playlists -> store
play -> controller
정보를 얻기 위해 쿼리를 사용하기 위한 쿼리 언어로 클라이언트가 데이터를 서버로부터 가져오는 것을 목적으로 하는 API이다.
REST API는 어떠한 기능이 필요하다면 필요할 때마다 각 비즈니스 도메인에 계속 새로운 API를 일일이 만들어주어야 한다.
REST API와 비교해서 HTTP 요청 횟수를 줄이고 응답 사이트를 줄일 수 있다.
원하는 정보를 하나의 쿼리에 모두 담아 요청하는 것이 가능하고 쿼리 작성을 통해 필요한 데이터만 골라 받아올 수 있다.
장단점이 있기 때문에 필요에 따라 사용.
Q1. 동적 페이지를 만들 때 https://www.xxxx.com/?name=~~ 이런 형식으로 parameter를 받아서 넘어오는 방식도 있던 것 같은데..
Application이 없어도 웹 서버 단일 동작으로도 parameter값을 사용하여 동적 페이지를 만들 수 있는건가요??
A1. Query Parameter 라는 개념을 설명드렸다시피
?name=value 이런 형태로 다양한 요청을 보낼 수 있어요.
이건 어떻게 요청하는가 에 해당하는것이기 때문에
위 URL 요청 방식과
요청에 따른 웹 페이지를 어떻게 반환할것인가 는 별개로 생각해야합니다
?name=value 이런 형태로 웹 서버든 웹 어플리케이션 서버든 받았을떄
?name=value 에 알맞는 정적인 페이지들을 모두 모아놓고 반환할수도
(어떻게 보면 동적인 페이지를 반환하는것처럼 URI 를 예쁘게 만든 눈속임이라고 할까요)
?name=value 요청에 따라 알맞은 동적 페이지를 만들어서 요청마다 반환할 수도 있습니다.
Application 없이 웹 서버 단일로 동적 페이지를 만들 수는 없구요
정적 페이지를 반환하는데(할수밖에없는데), 동적 페이지를 반환하는것처럼 오해하도록? 눈속임하도록? Query Parameter ?name=value 라는 형태의 URI 를 만들었다 보시면 될거 같아요.
Reference
🔗 REST API vs GraphQL - 차이점
🔗 https://ldgeao99-developer.tistory.com/67 - REST API 란?
🔗 https://wisdom-and-record.tistory.com/94 - REST API란 무엇인가
🔗 https://aws.amazon.com/ko/what-is/api/