# μ‘μμ€μ€
λ·°μμ κΆκ³ νλ HTTP ν΅μ λΌμ΄λΈλ¬λ¦¬λ μ‘μμ€μ€(Axios)μ λλ€. Promise κΈ°λ°μ HTTP ν΅μ λΌμ΄λΈλ¬λ¦¬μ΄λ©° μλμ μΌλ‘ λ€λ₯Έ HTTP ν΅μ λΌμ΄λΈλ¬λ¦¬λ€μ λΉν΄ λ¬Έμνκ° μλμ΄ μκ³ APIκ° λ€μν©λλ€.
# μ‘μμ€μ€ μ€μΉ
νλ‘μ νΈμ μ‘μμ€μ€λ₯Ό μ€μΉνλ λ°©λ²μ CDN λ°©μκ³Ό NPM λ°©μ 2κ°μ§κ° μμ΅λλ€.
# CDN λ°©μ
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
# NPM λ°©μ
npm install axios
# μ‘μμ€μ€ μ¬μ©λ°©λ²
λΌμ΄λΈλ¬λ¦¬λ₯Ό μ€μΉνκ³ λλ©΄ axios
λΌλ λ³μμ μ κ·Όν μ μκ² λ©λλ€. axios
λ³μλ₯Ό μ΄μ©νμ¬ μλμ κ°μ΄ HTTP GET μμ²μ λ 리λ μ½λλ₯Ό μμ±ν©λλ€.
<div id="app">
<button v-on:click="fetchData">get data</button>
</div>
new Vue({
el: '#app',
methods: {
fetchData: function() {
axios.get('https://jsonplaceholder.typicode.com/users/')
.then(function(response) {
console.log(response);
})
.catch(function(error) {
console.log(error);
});
}
}
})
μ μ½λλ get data λ²νΌμ ν΄λ¦νμ λ μ¬μ©μ μ 보λ₯Ό λ°μμ€λ μ½λμ λλ€. μ€ννλ©΄ μ¬μ©μ μ λ³΄κ° λΈλΌμ°μ κ°λ°μ λꡬμ μ½μμ μΆλ ₯λ©λλ€.
# μ‘μμ€μ€ μλ΅ μ μ΄
# .then
λΉλκΈ° ν΅μ μ΄ μ±κ³΅νμ κ²½μ°, .then()
μ μ½λ°±μ μΈμλ‘ λ°μ κ²°κ΄κ°μ μ²λ¦¬ν μ μμ΅λλ€.
# .catch
.catch()
λ₯Ό ν΅ν΄ μ€λ₯λ₯Ό μ²λ¦¬ν©λλ€. error
κ°μ²΄μμλ μ€λ₯μ λν μ£Όμ μ 보λ₯Ό νμΈν μ μμ΅λλ€.
axios.get('/hello')
.catch(function (error) {
if (error.response) {
console.log(error.response.status);
console.log(error.response.headers);
}
}
μμ κ°μ΄ .catch
μμ λ°μμ€λ error
κ°μ²΄λ₯Ό ν΅ν΄ error.response.status
μλ΅ μνμ½λμ error.response.headers
μλ΅ ν€λ μ 보λ₯Ό νμ
ν μ μμ΅λλ€.
κΈ°ν μλ¬ μ²λ¦¬ λ°©λ²μ axios μλ¬ μ²λ¦¬ λ¬Έμ (opens new window)λ₯Ό μ°Έκ³ ν©λλ€.
# μ‘μμ€μ€ HTTP μμ² λ©μλ μ’ λ₯
μ‘μμ€μ€μμ μμ£Ό μ¬μ©λλ HTTP μμ² λ©μλλ₯Ό μμλ³΄κ² μ΅λλ€.
# axios.get(url[, config])
μλ²μμ λ°μ΄ν°λ₯Ό κ°μ Έμ¬ λ μ¬μ©νλ λ©μλμ
λλ€. λ λ²μ§Έ νλΌλ―Έν° config
κ°μ²΄μλ ν€λ(header), μλ΅ μ΄κ³Όμκ° (timeout), μΈμ κ°(params) λ±μ μμ² κ°μ κ°μ΄ λκΈΈ μ μμ΅λλ€.
axios.get('users/1')
# axios.post(url[, data[, config]])
μλ²μ λ°μ΄ν°λ₯Ό μλ‘ μμ±ν λ μ¬μ©νλ λ©μλμ
λλ€. λ λ²μ§Έ νλΌλ―Έν° data
μ μμ±ν λ°μ΄ν°λ₯Ό λκΉλλ€.
axios.post('/books', { title: '1984' })
# axios.put(url[, data[, config]])
νΉμ λ°μ΄ν°λ₯Ό μμ ν λ μμ²νλ λ©μλμ
λλ€. put
μ μλ‘μ΄ λ¦¬μμ€λ₯Ό μμ±νκ±°λ, μ΄λ―Έ μ‘΄μ¬νλ λ°μ΄ν°λ₯Ό λ체ν λ μ¬μ©λ©λλ€. post
μμ λ€λ₯Έ μ μ post
λ μ¬λ¬ λ² νΈμΆν κ²½μ°, μλ‘μ΄ λ°μ΄ν°κ° μ§μμ μΌλ‘ μΆκ°λ©λλ€. λ°λ©΄, put
μ ν λ² μμ²μ νκ±°λ μ¬λ¬ λ² μ§μμ μΌλ‘ μμ²ν΄λ κ²°κ΄κ°μ΄ λμΌν©λλ€. μλ₯Ό λ€μ΄, μλ μμμ²λΌ 2λ² μ μ μ μ΄λ¦μ Iron Man
μΌλ‘ μμ νκΈ° μν΄ axios.put
μμ²μ 보λ
λλ€. μ΄λ, put
μμ²μ ν λ² λ³΄λ΄κ±°λ μ¬λ¬ λ² λ³΄λ΄λ 2λ² μ μ μ μ΄λ¦μ Iron Man
μΌλ‘ λμΌνκ² μμ λ©λλ€.
axios.put('users/2', { name: 'Iron Man' })
# axios.delete(url[, config])
νΉμ λ°μ΄ν°λ κ°μ μμ ν λ μμ²νλ λ©μλμ λλ€.
axios.delete('books/3')
# μ‘μμ€μ€ HTTP μμ² Config μ΅μ
μ‘μμ€μ€ μμ²μ ν λλ config μ€μ μ΄ κ°λ₯ν©λλ€.
# method
method
λ μμ²μ ν λ μ¬μ©ν μμ² λ©μλμ
λλ€. method
μ κΈ°λ³Έκ°μ getμ
λλ€.
# url
url
μ μ‘μμ€μ€ μμ²μ μ¬μ©λ μλ²μ URLμ λ§ν©λλ€.
url: '/books'
# method
method
λ μμ²μ ν λ μ¬μ©ν μμ² λ©μλμ
λλ€. method
μ κΈ°λ³Έκ°μ get μ
λλ€.
method: 'get'
# baseURL
baseURL
μ μ‘μμ€μ€ μΈμ€ν΄μ€λ₯Ό μμ±ν λ, μΈμ€ν΄μ€μ κΈ°λ³Έ URL κ°μ μ ν μ μλ μμ±μ
λλ€. λ³΄ν΅ http://mysite.com/api/v1/
μ²λΌ API μλ²μ κΈ°λ³Έ λλ©μΈμ μ€μ νκ³ , μΈμ€ν΄μ€ λ³λ‘ URLμ λ€μ μΆκ°νμ¬ μ¬μ©ν©λλ€.
baseURL: 'https://λλ©μΈ.com/api/'
# headers
ν€λλ₯Ό μμ ν΄μ 보λ΄μΌ νλ€λ©΄ headers
λ₯Ό μ¬μ©νλ©΄ λ©λλ€.
headers: {'X-Requested-With': 'XMLHttpRequest'}
# params
params
λ HTTP μμ²μ λΆμΌ URL νλΌλ―Έν°λ₯Ό μλ―Έν©λλ€. μλ₯Ό λ€μ΄, μλ μμ μ½λλ https://domain.com
μ΄λΌλ URLλ‘ HTTP μμ²μ 보λμ λ https://domain.com?id=123
μΌλ‘ μ λ¬νλ κ²κ³Ό κ°μ ν¨κ³Όλ₯Ό κ°μ§λλ€. μ¬κΈ°μ params
κ° null
μ΄λ undefined
μΈ κ²½μ°μλ νλΌλ―Έν°κ° μ‘°ν©λμ§ μμ΅λλ€.
params: {
id: 123
}
# data
data
λ HTTP μμ² λ³΄λμ μ€μ΄μ λ³΄λΌ λ°μ΄ν°λ₯Ό μλ―Έν©λλ€. μ£Όλ‘ λ°μ΄ν°λ₯Ό μ‘°μν΄μΌ νλ PUT, POST, DELETE, PATCH λ±μ λ©μλμμ μ¬μ©ν©λλ€.
data: {
firstName: 'Christine'
},
// μλμ data config μ€μ μ POST λ©μλμμλ§ μ¬μ©μ΄ κ°λ₯ν©λλ€.
data: 'Age=26&City=New York'
# timeout
timeout
μ HTTP μμ²μ 보λ΄κ³ μλ΅μ λ°κΈ°κΉμ§μ μ ν μκ°μ μ€μ νλ μμ±μ
λλ€. μμ² μκ°μ΄ μ§μ λ κ°μ μ΄κ³Όνλ©΄ μλ¬κ° λ°μν©λλ€.
// λ¨μ(millisecond)
timeout: 5000
# responseType
responseType
μ μλ²λ‘λΆν° μ΄λ ν λ°μ΄ν° νμμΌλ‘ μλ΅λ°μμ§ μ§μ νλ κ²μ
λλ€. μ΅μ
μΌλ‘λ arraybuffer, document, json, text, streamμ΄ κ°λ₯ν©λλ€. κΈ°λ³Έ κ°μ jsonμ
λλ€.
responseType: 'json'
# κΈ°ν μ‘μμ€μ€ μμ² Config
Config μ΅μ μ λ©μλ λ³λ‘ μ¬μ©ν μ μλ μ΅μ μ΄ λ€λ₯΄λ―λ‘, μ‘μμ€μ€ Request Config λ¬Έμ (opens new window)λ₯Ό μ°Έκ³ ν©λλ€.
# κΈ°ν μ‘μμ€μ€ API
κΈ°ν μ‘μμ€μ€ κ΄λ ¨ μμ μ APIλ μ‘μμ€μ€ λ¬Έμ (opens new window)λ₯Ό μ°Έκ³ ν©λλ€.