Unit8 - [HTTP/네트워크] 실습
REST API에서 REST(Representational State Transfer) : 웹 기술의 아키텍처 스타일
REST API는 HTTP 프로토콜을 이용해 리소스와 관련된 정보와 기능을 제공
웹에서 사용되는 데이터나 자원(Resource)을 HTTP URI로 표현하고,
HTTP 프로토콜을 통해 요청과 응답을 정의하는 방식
REST 성숙도 모델 - 0단계
HTTP 프로토콜을 사용하기만 해도 된다.
0단계는 REST API를 작성하기 위한 기본 단계
REST 성숙도 모델 - 1단계
REST 성숙도 모델에 따르면, 1단계에서는 개별 리소스(Resource)와의 통신을 준수
모든 자원은 개별 리소스에 맞는 엔드포인트(Endpoint)를 사용해야하며
요청하고 받는 자원에 대한 정보를 응답으로 전달해야 한다
엔드포인트 작성시 : 명사 형태의 단어로 작성
ex) 고객 리소스
- GET /customers: 고객 리소스의 목록을 조회
- GET /customers/{id}: 특정 고객 리소스를 조회
- POST /customers: 새 고객 리소스 생성
- PUT /customers/{id}: 특정 고객 리소스의 정보를 업데이트
- DELETE /customers/{id}: 특정 고객 리소스를 삭제
고객 리소스의 엔드포인트를 통해 HTTP 요청을 하면, 고객 리소스에 대한 정보가 응답으로서 전달
ex) GET /customers/{id} 요청을 하면, id에 해당하는 고객 리소스의 정보가 JSON 형태로 응답으로서 전달
요청에 따른 응답으로 리소스를 전달할 때에도 사용한 리소스에 대한 정보와 함께
리소스 사용에 대한 성공/실패 여부를 반환
REST 성숙도 모델 - 2단계
CRUD에 맞게 적절한 HTTP 메서드를 사용하는 것에 중점
조회(READ)하기 위해서는 GET 메서드를 사용하여 요청을 보내고,
이때 GET 메서드는 body를 가지지 않기 때문에 query parameter를 사용하여 필요한 리소스를 전달
생성(CREATE)하기 위해서는 POST 메서드를 사용하여 요청을 보내야 하며,
POST 요청에 대한 응답이 어떻게 반환되는지가 중요
HTTP메서드를 사용할 때 규칙
GET 메서드 같은 경우는 서버의 데이터를 변화시키지 않는 요청에 사용
POST 메서드는 요청마다 새로운 리소스를 생성
PUT 메서드는 요청마다 같은 리소스를 반환
기존 리소스를 업데이트하는 데 사용
PUT은 교체, PATCH는 수정의 용도로 사용
PUT 메서드는 기존 리소스를 완전히 교체하는 데 사용
PATCH 메서드는 기존 리소스의 일부만 수정하는 데 사용
REST 성숙도 모델 - 3단계
하이퍼미디어 컨트롤을 적용 HATEOAS(Hypermedia As The Engine Of Application State)
응답에는 리소스의 URI를 포함한 링크 요소를 삽입하여 작성
응답 내에 새로운 링크를 넣어 새로운 기능에 접근할 수 있도록 하는 것
리소스와 표준 CRUD 연산 외에도 API가 응답에 하이퍼미디어 링크를 포함하여
관련 리소스로의 탐색을 허용한다는 것을 의미
API는 더욱 자체적으로 설명되고 클라이언트는 API와 더욱 상호작용 할 수 있다.
클라이언트는 자신의 상태에 따라 어떤 작업이 가능한지 API에서 제공되는 링크를 통해 파악
Open API
웹 API를 만들 때 사용하는 규약
API의 구조와 기능, 정보를 자세히 정의할 수 있게 도와준다.
API Key
서버의 문을 여는 열쇠
웹 서비스 또는 API에 접근하는 데 필요한 고유한 키
이 키는 API 사용자를 식별하고, 사용자가 제공한 서비스에 대한 제한을 걸 수 있다.
API Key는 HTTP 요청의 헤더에 추가되어 API에 접근할 수 있는 권한을 확인할 수 있다.
Postman
브라우저(클라이언트)는 서버에 HTTP 요청을 보낼 수 있다
웹페이지를 받아오는 get 요청에 사용
개발자 도구의 콘솔창에서 Web API fetch를 사용
실습
Postman 가입 및 설치 - workspaces에 들어가기
Postman 사용하기
URL
GET 요청
메시지 조회
요청
http://3.36.72.17:3000/so/messages
so가 작성한 모든 메시지를 조회
응답 (JSON 형식)
[
{
"id": 1,
"username": "so"",
"text": "hellp",
"roomname": "로비",
"date": "2021-04-02 12:00:00"
}
// ...여러 개의 메시지
]
POST 요청
메시지 추가
요청
http://3.36.72.17:3000/so/messages
so가 새로운 메시지를 작성
응답(JSON 형식)
{
"id": 5
}
새로 생성된 메시지의 고유한 ID값
새메시지 작성법
본문의 형식 선택(1)
Body에서 raw , JSON 선택
본문의 형식 선택(2)
HTTP 요청 헤더에
key
Content-Type
value
application/json
Content-Type : application/json
"Raw"은 HTTP 요청 메시지에서 데이터를 전송할 때 사용되는 형식
웹 API를 통해 JSON 데이터를 전송할 때 "Raw" 옵션을 선택하면,
JSON 데이터를 그대로 HTTP 요청 메시지에 포함
이를 통해 API를 호출하는 쪽에서 JSON 형식으로 정의된 데이터를 전송할 수 있다.
"Raw" 옵션을 선택하지 않으면, HTTP 요청 메시지에 JSON 데이터를 포함시킬 수 없다.
HTTP header의 "Content-Type: application/json"을 사용하지 않으면, API 서버에서는 요청 메시지에 포함된 데이터의 형식을 알 수 없게 된다.
API 서버는 정상적으로 요청 메시지를 처리하기 위해서는 데이터의 형식을 알아야 하며,
"Content-Type: application/json"이 지정되지 않았을 경우 올바른 데이터 처리를 위한 필요한 정보가 누락
따라서, "Content-Type: application/json" header를 사용하지 않으면, API 서버에서는 오류가 발생할 수 있으며, 정상적으로 요청이 처리되지 않을 수 있다.
따라서 HTTP header에 "Content-Type: application/json"을 사용하여 JSON 형식의 데이터를 전송할 것을 권장한다.
HTTP header의 key-value 쌍은 HTTP 요청 또는 응답에 대한 추가 정보를 제공
Content-Type: application/json은 HTTP 요청 또는 응답에서 전송되는 데이터의 형식을 지정하는 header
application/json은 데이터가 JSON 형식으로 전송된다는 것
HTTP header의 여러 key-value 쌍은 HTTP 요청 또는 응답에서 전송되는 데이터에 대한 부가 정보를 제공하여 서버와 클라이언트 사이에서 데이터를 정확하게 처리할 수 있도록 한다.
{
"username":"ysy",
"text":"new text",
"roomname":"codestates"
}
새로운 메시지를 본문에 담아 POST요청을 보낸다.
post 방식과 get방식 body 포함
POST 방식은 서버로 데이터를 보낼 때 사용되고,
GET 방식은 서버에서 데이터를 가져올 때 사용
POST 방식으로 서버로 보내진 데이터는 요청 본문에 들어가게 되지만,
GET 방식으로 보내진 데이터는 URL에 파라미터로 전달
그래서 GET 요청은 요청 본문이 없으며 데이터를 보내는 기능이 제한되지만,
POST 요청은 요청 본문에 무제한의 데이터를 보낼 수 있다.
퀴즈
REST API에서 검색 조건을 표현할 때는 Query Parameter를 사용하는 것이 일반적이다. 이 요청의 경우, 검색어를 "title"에 전달하는 Query Parameter를 사용하며, "GET /books?title=code" 형식으로 구성
Query Parameter와 Path Parameter의 차이
Query Parameter은 URL 뒤에 ?key=value 형태로 추가
예를 들어, 검색 결과 페이지의 페이지 번호나 검색 키워드와 같은 정보를 전달할 때 사용
Query Parameter는 GET 만지원하며, 최대 데이터 전송 크기에 제한이 있습니다.
GET 요청의 경우 body가 존재하지 않기 때문에 이를 Query Parameter를 이용하여 구현
Path Parameter은 URL 경로에 파라미터를 포함하여 전달
. 예를 들어, 사용자 정보와 같은 리소스에 대한 정보를 전달할 때 사용
Path Parameter는 GET, POST, PUT, DELETE 등 모든 HTTP 메서드에서 지원되며, 제한이 없다.
HTTP 상태 코드 409 Conflict는 리소스 충돌을 나타내는 상태 코드
예를 들어, 동일한 좌석이 다른 사용자에 의해 이미 예약되어 있을 경우 발생할수 있다.
409 Conflict은 요청이 처리되지 않은 것을 나타내고, 클라이언트는 요청을 다시 시도할 것을 권유
REST API에서는 언어와 문화에 국한되지 않은 공통의 표준을 적용하기 위해서, 응답 메시지는 주로 영문으로 작성됩니다.
.이는 REST API를 사용하는 다양한 국가와 문화에서 공유 가능한 표준언어로 작성하기 위함
Payload는 HTTP 메시지 내용을 가르킨다
즉, HTTP 요청 또는 응답의 본문을 나타냅니다.
예를 들어, HTTP POST 요청에서는 데이터를 전송하기 위해 Payload에 값을 넣어서 전송
offset과 limit은 데이터 범위를 지정하는 파라미터
offset은 결과에서 시작할 위치를 지정
예를 들어, offset이 10이면 결과에서 11번째 항목부터 보여준다.
limit은 결과에서 보여줄 항목의 수를 지정한다.
예를 들어, limit가 10이면 결과에서 10개의 항목만 보여준다.
offset과 limit은 API 호출을 통해 데이터를 가져올 때 결과의 범위를 지정할 때 사용