# * Using Fetch
# REST API Connect
Reference
API Connenctor Fetch ์ฌ์ฉ๋ฒ.
# Fetch
์ ๋งํฌ๋ฅผ ์ฐธ์กฐ๋ก ์์ฑํ ๋ด์ฉ์ด๋ค.
Fetch API๋ฅผ ์ด์ฉํ๋ฉด Request๋ Response์ ๊ฐ์ HTTP์ ํ์ดํ๋ผ์ธ์ ๊ตฌ์ฑํ๋ ์์๋ฅผ ์กฐ์ํ๋๊ฒ์ด ๊ฐ๋ฅํฉ๋๋ค. ๋ํ fetch() ๋ฉ์๋๋ฅผ ์ด์ฉํ๋ ๊ฒ์ผ๋ก ๋น๋๊ธฐ ๋คํธ์ํฌ ํต์ ์ ์๊ธฐ์ฝ๊ฒ ๊ธฐ์ ํ ์ ์๋ค.
jQuery.ajax() ์ ์ฐจ์ด์
- fetch()๋ก ๋ถํฐ ๋ฐํ๋๋ Promise ๊ฐ์ฒด๋ HTTP error ์ํ๋ฅผ rejectํ์ง ์์ต๋๋ค. ๋์ ok ์ํ๊ฐ false์ธ resolve๊ฐ ๋ฐํ๋๋ฉฐ, ๋คํธ์ํฌ ์ฅ์ ๋ ์์ฒญ์ด ์๋ฃ๋์ง ๋ชปํ ์ํ์๋ reject๊ฐ ๋ฐํ๋๋ค.
- ๋ณดํต fetch๋ ์ฟ ํค๋ฅผ ๋ณด๋ด๊ฑฐ๋ ๋ฐ์ง ์์ต๋๋ค. ์ฌ์ดํธ์์ ์ฌ์ฉ์ ์ธ์ ์ ์ ์ง ๊ด๋ฆฌํด์ผํ๋ ๊ฒฝ์ฐ ์ธ์ฆ๋์ง ์๋ ์์ฒญ์ด ๋ฐ์ํฉ๋๋ค. ์ฟ ํค๋ฅผ ์ ์กํ๊ธฐ ์ํด์๋ ์๊ฒฉ์ฆ๋ช (credentials) ์ต์ ์ ๋ฐ๋์ ์ค์ ํด์ผ ํ๋ค.
# Basic
๊ธฐ๋ณธ์ ์ธ fetch ์์ฑ๋ฒ
fetch("https://jsonplaceholder.typicode.com/todos/1")
.then(response => response.json())
.then(json => console.log(json));
response : {
"userId": 1,
"id": 1,
"title": "delectus aut autem",
"completed": false
}
2
3
4
5
6
7
8
9
10
# Headers
Headers ์ธํฐํ์ด์ค์์ Headers() ์์ฑ์๋ฅผ ์ฌ์ฉํด ํค๋ ๊ฐ์ฒด๋ฅผ ์์ฑํ ์ ์๋ค.
const content = "Hello World!";
const awesomeHeaders = new Headers();
awesomeHeaders.append("Content-Type", "application/json");
awesomeHeaders.append("Content-Length", content.length.toString());
//๊ฐ์ฒด ๋ฆฌํฐ๋ด์ ์์ฑ์์ ์ ๋ฌํ๋๊ฒ์ผ๋ก ์์ฑํ ์๋ ์๋ค.
const awesomeHeaders = new Headers({
"Content-Type": "application/json",
"Content-Length": content.length.toString()
});
2
3
4
5
6
7
8
9
10
# Body
Request, Resposne ๋๋ค Body๋ฅผ ๊ฐ์ง๊ณ ์๋ค.
body๋ ์๋์์ ๊ธฐ์ ํ ํ์
๋ค ์ค ํ๋๋ก ์ค์ ํ ์ ์๋ค.
- ArrayBuffer
- ArrayBufferView (Uint8Array๊ฐ์ TypedArray)
- Blob/File
- ๋ฌธ์์ด
- URLSearchParams
- FormData
Body๋ฅผ ๋ค๋ฃจ๊ธฐ์ํด์ ์ ๊ณต๋๋ Method๊ฐ ์๋ค.
- arrayBuffer()
- blob()
- json()
- text()
- formData()
fetch("https://jsonplaceholder.typicode.com/posts", {
method: "POST",
body: JSON.stringify({
title: "foo",
body: "bar",
userId: 1
}),
headers: {
"Content-type": "application/json; charset=UTF-8"
}
})
.then(response => response.json())
.then(json => console.log(json));
2
3
4
5
6
7
8
9
10
11
12
13
# Request
๋๋ฒ์งธ ํ๋ผ๋ฏธํฐ๋ฅผ ์ ์ฉํ๋๊ฒ๋ ๊ฐ๋ฅํฉ๋๋ค. ๋ค์์ ์ค์ ์ ์ปจํธ๋กคํ ์ ์๋ ์ด๊ธฐํ ์ต์
์ด๋ค.
์๋์ ๊ฐ์ด ๋๋ฒ์งธ ์ธ์์ ๋ค์ด๊ฐ์ ์๋ ์ต์
๋ค์ด๋ค.
- method
- headers
- body
- mode
- cache
- credentials
- redirect
- referrer
- integrity
const init = {
method: "GET",
mode: "cors", //The mode you want to use for the request, e.g., cors, no-cors, or same-origin.
cache: "default" // The cache mode you want to use for the request.
};
fetch("train.jpg", init)
.then(function(response) {
return response.blob();
})
.then(function(myBlob) {
const objectURL = URL.createObjectURL(myBlob);
myImage.src = objectURL;
});
2
3
4
5
6
7
8
9
10
11
12
13
14
# Query parameters
์ฟผ๋ฆฌ ๋งค๊ฐ ๋ณ์๋ ์ง์๋๋ค.
fetch("https://jsonplaceholder.typicode.com/posts?userId=1")
.then(response => response.json())
.then(json => console.log(json));
2
3