Що таке HTTP?
HTTP означає Hypertext Transfer Protocol. HTTP функціонує в якості протоколу запит-відповідь в обчислювальній клієнт-серверній моделі.
Коди стану HTTP
Перед тим, як зануритися в інші API, давайте розглянемо коди стану HTTP, з якими ми можемо зіткнутися в ході процесу розробки наших застосунків. Вони описують результати наших запитів і несуть важливе значення при обробці помилок.
-
1xx - Інформаційні.
-
2xx - Успішні операції: Ці коди стану вказують, що наш запит був отриманий і оброблений правильно. Найбільш поширеними кодами успішної операції є
200 OK
,201 Created
і204 No Content
. -
3xx - Переадресація: Ця група показує, що клієнт повинен зробити додаткову дію для завершення запиту. Найбільш поширені коди переадресації:
301 Moved Permanently
,304 Not Modified
. -
4xx - Клієнтська помилка: Цей клас кодів стану використовується, коли запит, надісланий клієнтом виявився несправним. Відповідь сервера зазвичай містить пояснення помилки. Найбільш поширені коди клієнтських помилок:
400 Bad Request
,401 Unauthorized
,403 Forbidden
,404 Not Found
,409 Conflict
. -
5xx - Серверна помилка: Ці коди надсилаються, коли сервер не в змозі виконати запит. Причиною може бути помилка в коді або тимчасова чи постійна недієздатність. Найбільш поширені такі коди:
500 Internal Server Error
,503 Service Unavailable
. Якщо ви хочете дізнатися більше про коди стану HTTP, ви можете знайти деталі тут.
Надсилання запитів до зовнішніх API
Підключитися до зовнішніх API у Node дуже легко. Ви можете просто запросити основний модуль HTTP та почати відсилати запити.
Звичайно, є й ефективніші способи викликати зовнішню кінцеву точку. В NPM ви можете знайти кілька модулів, які можуть зробити цей процес простіше. Наприклад, два найбільш популярні з них є модулі request і superagent.
Обидва модулі мають інтерфейс типу error-first callback, який може привести до деяких проблем (я впевнений, ви чули про Callback-пекло), але, на щастя, у нас є доступ до версій загорнутих в promise.
Використання модуля запитів у Node.js
Використання модуля request-promise дуже просте. Після його встановлення з NPM, вам потрібно лише запросити його:
const request = require('request-promise')
Відправлення GET-запиту так само просте:
const options = {
method: 'GET',
uri: 'https://web.archive.org/web/20230327105409/https://risingstack.com'
}
request(options)
.then(function (response) {
// Запит був успішним, використати об'єкт відповіді за власним бажанням
})
.catch(function (err) {
// Щось пішло не так, обробити помилку
})
Якщо ви викликаєте JSON API, ви можете захотіти, щоб request-promise автоматично аналізував відповідь. У цьому випадку, просто додайте це до параметрів запиту:
json: true
POST-запити працюють таким самим чином:
const options = {
method: 'POST',
uri: 'https://web.archive.org/web/20230327105409/https://risingstack.com/login',
body: {
foo: 'bar'
},
json: true
// JSON автоматично перетворює body на рядок
}
request(options)
.then(function (response) {
// Обробити відповідь
})
.catch(function (err) {
// Обробити помилку
})
Щоб додати параметри рядка запиту потрібно просто додати властивість qs
об'єкту options:
const options = {
method: 'GET',
uri: 'https://web.archive.org/web/20230327105409/https://risingstack.com',
qs: {
limit: 10,
skip: 20,
sort: 'asc'
}
}
Це створить ваш URL запиту:https://risingstack.com?limit=10&skip=20&sort=asc
.
Ви також можете оголосити заголовок таким самим чином:
const options = {
method: 'GET',
uri: 'https://web.archive.org/web/20230327105409/https://risingstack.com',
headers: {
'User-Agent': 'Request-Promise',
'Authorization': 'Basic QWxhZGRpbjpPcGVuU2VzYW1l'
}
}
Обробка помилок
Обробка помилок є невід'ємною частиною у створенні запитів до зовнішніх API, так як ми ніколи не можемо бути впевнені, що з ними буде далі. Крім наших клієнтських помилок сервер може також відповісти помилкою або просто відправити дані в неправильному форматі. Пам'ятайте це, коли будете обробляти відповіді. Крім того, використовувати catch
для кожного запиту є гарним способом уникнути збою нашого сервера через зовнішні сервери.
Збираємо все разом
Ви вже знаєте, як розкрутити HTTP-сервер в Node.js, як рендерити HTML-сторінки, і як отримувати дані з зовнішніх API, тому настав час зібрати їх!
У цьому прикладі ми створимо Express-застосування, яке може визначати поточні погодні умови на основі назв міст.
(Щоб отримати ключ AccuWeather API, перейдіть до їх сайту для розробників)
const express = require('express')
const rp = require('request-promise')
const exphbs = require('express-handlebars')
const app = express()
app.engine('.hbs', exphbs({
defaultLayout: 'main',
extname: '.hbs',
layoutsDir: path.join(__dirname, 'views/layouts')
}))
app.set('view engine', '.hbs')
app.set('views', path.join(__dirname, 'views'))
app.get('/:city', (req, res) => {
rp({
uri: 'https://web.archive.org/web/20230327105409/http://apidev.accuweather.com/locations/v1/search',
qs: {
q: req.params.city,
apiKey: 'api-key'
// Використайте ключ accuweather API тут
},
json: true
})
.then((data) => {
res.render('index', data)
})
.catch((err) => {
console.log(err)
res.render('error')
})
})
app.listen(3000)
Наведений приклад робить наступне:
-
створює Express-сервер
-
встановлює handlebars структуру - щодо
.hbs
перейдіть до частини про HTTP-сервер у Node.js. -
відправляє запит до зовнішнього API
- якщо все добре, він рендерить сторінку
- в іншому випадку, він показує сторінку помилки та реєструє цю помилку
Далі: Частина 7 - Структура проектів на Node.js
Ще немає коментарів