Чрезвычайно важный аспект современного веб-разработчика – знать, как работать с API для облегчения связи между различными программными системами.
В этом руководстве вы узнаете, как создавать собственные спокойные API в среде Node.js, работающей на Express Server и используя базу данных PostgreSQL.
Предварительные условия
Чтобы получить максимальную отдачу от этого учебника, есть несколько предпосылок:
- Вы должны быть знакомы с помощью синтаксиса JavaScript и основами
- Вы должны иметь базовые знания о работе с командная строка
- Вы должны иметь Node.js и npm установлены
Цели
К тому времени, когда вы завершите эту статью, у вас должен быть полностью функциональный сервер API, работающий на экспресс-каркасе в Node.js. API должен иметь возможность обрабатывать методы HTTP-запроса, которые соответствуют базе данных PostgreSQL, из которых API получает свои данные. Вы узнаете, как установить PostgreSQL и работать с ним через интерфейс командной строки.
Что такое спокойный API?
Остальные стоят за Re презентационный S делать T RANSFER и определяет набор стандартов для веб-сервисов. API – это интерфейс, который разные программные программы используют для взаимодействия друг с другом. Следовательно, восстановленное API является API, который соответствует остальным архитектурному стилю и ограничениям. Системы отдыха являются нестандартными, масштабируемыми, кешируемыми и имеют единый интерфейс.
Restful API наиболее часто используют HTTP-запросы. Четыре из наиболее распространенных HTTP-методов получают, пост, поставить и удалить, которые являются методами, с помощью которых разработчик может создать систему CRUD – создать, чтение, обновление, удаление.
PostgreSQL База данных
PostgreSQL Обычно называют Postgres, представляет собой бесплатную и открытую систему управления реляционными базами данных. Вы можете быть знакомы с несколькими другими аналогичными системами базы данных, такие как MySQL, Microsoft SQL Server или Mariadb, которые конкурируют с PostgreSQL.
PostgreSQL – это надежная, но стабильная реляционная база данных, которая была около 1997 года и доступна на всех основных операционных системах – Linux, Windows и MacOS. Поскольку PostgreSQL известен своей стабильностью, расширяемостью и соответствием стандартами, это популярный выбор для разработчиков и компаний для их использования для их базы данных.
Мы начнем этот учебник, установив PostgreSQL, создавая новый пользователь, создавая базу данных и инициализацию таблицы с схемой и некоторыми данными.
Установка
Если вы используете Windows, загрузите Windows Installer PostgreSQL.
Если вы используете Mac, это руководство предполагает, что у вас есть Домашний вид Установлен на вашем компьютере в качестве менеджера пакета для установки новых программ. Если вы этого не сделаете, просто нажмите на ссылку и следуйте инструкциям по установке домелки.
Откройте терминал и установите PostgreSQL с помощью Brew.
brew install postgresql
Вы можете увидеть инструкции в сети, которые скажут Brew Install PostgreSinstead PostgreSQL. Оба эти параметра будут устанавливать PostgreSQL на вашем компьютере.
После завершения установки мы захотите получить PostgreSQL UP и запустить, что мы можем сделать с начать службы.
brew services start postgresql ==> Successfully started `postgresql` (label: homebrew.mxcl.postgresql)
Если в любой момент вы хотите остановить PostgreSQL Service, вы можете запустить Brew Services Stop PostgreSQL.
PostgreSQL установлен сейчас, поэтому следующий шаг должен подключиться к линии PostgresCommand, где мы можем запустить команды SQL.
PostgreSQL. командная строка
PSQL – это интерактивный терминал PostgreSQL. Запуск PSQL подключит вас к хосту PostgreSQL. Запуск PSQL –help предоставит вам дополнительную информацию о доступных вариантах для подключения с PSQL.
-h
–--host = имя хоста
|. Database Server Host или Socket Directory (по умолчанию: «Локальный сокет»)-П
–--port = порт
|. Порт сервера базы данных (по умолчанию: «5432»)-У
–--username = имя пользователя
|. Имя пользователя базы данных (по умолчанию: «Your_username»)-w
–- Нет-пароль
|. Никогда не подскажите пароль-W
–--password
|. Заставьте запрос пароля (должно произойти автоматически)
Мы просто подключаемся к базе данных Postgres по умолчанию с системой входа в систему по умолчанию – нет флагов опций.
psql postgres
Вы увидите, что мы входили в новое соединение. Теперь мы внутри PSQL в базе данных Postgres. Подсказка заканчивается # для обозначения того, что мы вошли в систему как суперпользователь или root.
postgres=#
Команды в пределах PSQL начнутся с обратной ячейки (). Чтобы проверить нашу первую команду, мы можем обеспечить какую базу данных, пользователя и порт, который мы подключили к команде \ conninfo.
postgres=# \conninfo You are connected to database "postgres" as user "your_username" via socket in "/tmp" at port "5432".
Вот эталонная таблица нескольких распространенных команд, которые мы будем использовать в этом руководстве.
\ Q
|. ВыходPSQL
связь\ c
|. Подключиться к новой базе данных\ dt
|. Список Все таблицы\ du
|. Перечислите все роли\ Список
|. Список баз данных
Давайте создадим новую базу данных и пользователь, поэтому мы не используем учетные записи по умолчанию, которые имеют привилегии Superuser.
Создать пользователя
Во-первых, мы создадим роль под названием ME и дайте ему пароль пароля. Роль может функционировать как пользователь или группу, поэтому в этом случае мы будем использовать его как пользователь.
postgres=# CREATE ROLE me WITH LOGIN PASSWORD 'password';
Мы хотим, чтобы я мог создать базу данных.
postgres=# ALTER ROLE me CREATEDB;
Вы можете запустить \ du, чтобы переписать все роли/пользователей.
me | Create DB | {} postgres | Superuser, Create role, Create DB | {}
Теперь мы хотим создать базу данных от пользователя ME. Выйдите из сеанса по умолчанию с \ Q для Quit.
postgres=# \q
Мы вернемся в клеммное соединение нашего компьютера. Теперь мы свяжем со мной Postgres.
psql -d postgres -U me
Вместо postgres = #, наша подсказка показывает postgres => Теперь, что означает, что мы больше не вошли в систему как суперпользователь.
Создать базу данных
Мы можем создать базу данных с помощью команды SQL.
postgres=> CREATE DATABASE api;
Используйте команду \ lister, чтобы увидеть доступные базы данных.
Name | Owner | Encoding | Collate | Ctype | api | me | UTF8 | en_US.UTF-8 | en_US.UTF-8 |
Давайте подключитесь к новой базе данных API с помощью команды \ c (connect).
postgres=> \c api You are now connected to database "api" as user "me". api=>
Наша подсказка теперь отображает, что мы подключены к API.
Создать таблицу
Последнее, что мы сделаем в командной строке PSQL Command, создают таблицу, называемую пользователями с тремя полями – два типа Varchar и идентификатор первичного ключа на автоматическом увеличении.
api=> CREATE TABLE users ( ID SERIAL PRIMARY KEY, name VARCHAR(30), email VARCHAR(30) );
Убедитесь, что не используйте символ BackTick при создании и работе с таблицами в PostgreSQL. Хотя в MySQL разрешены Backticks, они не действительны в PostgreSQL. Кроме того, убедитесь, что у вас нет задней запятой в Создать команду table.
Мы добавим два записей в Пользователи
иметь некоторые данные для работы.
INSERT INTO users (name, email) VALUES ('Jerry', 'jerry@example.com'), ('George', 'george@example.com');
Давайте убедимся, что добавлено правильно, получая все записи у пользователей.
api=> SELECT * FROM users; id | name | email ----+--------+-------------------- 1 | Jerry | jerry@example.com 2 | George | george@example.com
Теперь у нас есть пользователь, база данных, таблица и некоторые данные. Мы можем начать строить наш Node.js redful API для подключения к этим данным, хранящимся в базе данных PostgreSQL.
Настройка экспресс-сервера
На данный момент мы закончили всеми нашими задачами PostgreSQL, и мы можем начать настройку нашего приложения Node.js и Express Server.
Создайте каталог для проекта для жизни.
mkdir node-api-postgres cd node-api-postgres
Вы можете запустить NPM init -y, чтобы создать Package.json или копировать код ниже в файл package.json.
{ "name": "node-api-postgres", "version": "1.0.0", "description": "RESTful API with Node.js, Express, and PostgreSQL", "main": "index.js", "license": "MIT" }
Мы захотим установить Экспресс Для сервера и Узел-postgres (PG) Чтобы быть в состоянии подключиться к PostgreSQL.
npm i express pg
Теперь у нас есть наши зависимости, загруженные в Node_Modules и Package.json.
Создайте файл index.js, который мы будем использовать в качестве точки входа для нашего сервера. В верхней части нам потребуется модуль Express, встроенный в BodyParser Middlware и установите наше приложение и переменные порта.
const express = require('express') const bodyParser = require('body-parser') const app = express() const port = 3000 app.use(bodyParser.json()) app.use( bodyParser.urlencoded({ extended: true, }) )
Мы расскажем к маршруту, чтобы искать запрос на получение root (/) URL и вернуть немного JSON.
app.get('/', (request, response) => { response.json({ info: 'Node.js, Express, and Postgres API' }) })
Теперь установите приложение, чтобы прослушать набор порта.
app.listen(port, () => { console.log(`App running on port ${port}.`) })
Из командной строки мы можем запустить сервер, ударяя index.js.
node index.js App running on port 3000.
Перейти к http://localhost: 3000 В баре URL вашего браузера, и вы увидите, что JSON мы установили ранее.
{ info: "Node.js, Express, and Postgres API" }
Теперь Express Server работает сейчас, но он отправляет только некоторые статические данные JSON, которые мы создали. Следующим шагом является подключение к PostgreSQL из Node.js, чтобы иметь возможность сделать динамические запросы.
Подключение к базе данных из Node.js
Мы будем использовать Узел-postgres Модуль для создания пула подключений. Таким образом, нам не нужно открывать клиента и закрыть его каждый раз, когда мы делаем запрос.
Популярный вариант для производства объединение будет использоваться PGBouncer , легкий соединительный бассейн для PostgreSQL.
Создайте файл под названием Queries.js и настройте конфигурацию вашего соединения PostgreSQL.
const Pool = require('pg').Pool const pool = new Pool({ user: 'me', host: 'localhost', database: 'api', password: 'password', port: 5432, })
В производственной среде вы захотите поставить информацию о конфигурации в отдельный файл с ограничительными разрешениями, которые не доступен от контроля версий, но для простоты этого учебника мы поддерживаем его в том же файле, что и запросы.
Целью этого учебника является разрешение Get, Post, Put и Delete Operations на API, которая запускает соответствующие команды базы данных. Для этого мы настроим маршрут для каждой конечной точки, и функция, которая соответствует каждому запросу.
Создание маршрутов
Мы собираемся создать шесть функций для шести маршрутов, которые видели на графике ниже. Во-первых, мы пройдемся и создаем все функции для каждого маршрута, затем мы экспортируем функции, чтобы они были доступны:
Получить
–/
|.Displayhome ()
Получить
–/пользователи
|.GetUsers ()
Получить
–/Пользователи/: ID
|.getUserbyid ()
Пост
–пользователи
|Создать пользователя()
Поставить
–/Пользователи/: ID
|UssuedUser ()
Удалить
–/Пользователи/: ID
|DELETEUSER ()
В index.js мы сделали App.get () для конечной точки root с функцией в нем. Теперь в Queries.js мы создадим конечные точки, которые будут отображать всех пользователей, отображать один пользователь, создать новый пользователь, обновить существующий пользователь и удалить пользователя.
Получите все пользователи
Наша первая конечная точка будет полученным запросом. Внутри Pool.Query () мы можем поставить RAW SQL, который коснется базы данных API. Мы выберем всех пользователей и заказ по ID.
const getUsers = (request, response) => { pool.query('SELECT * FROM users ORDER BY id ASC', (error, results) => { if (error) { throw error } response.status(200).json(results.rows) }) }
Получите один пользователь по ID
Для наших/пользователей/: id запроса, мы получим пользовательский идентификационный параметр по URL-адрес и используя предложение, где отображать результат.
В запросе SQL мы ищем ID = 1 $. В этом случае 1 доллар – это пронумерованный заполнитель, который PostgreSQL использует своевременное вместо? Зажигатель вы можете быть знакомы с других ароматов SQL.
const getUserById = (request, response) => { const id = parseInt(request.params.id) pool.query('SELECT * FROM users WHERE id = $1', [id], (error, results) => { if (error) { throw error } response.status(200).json(results.rows) }) }
Опубликовать новый пользователь
API возьмет запрос GET и POST на конечную точку/пользователей. В запросе пост мы добавим нового пользователя. В этой функции мы извлекаем имя и свойства электронной почты из корпуса запроса и вставляем значения.
const createUser = (request, response) => { const { name, email } = request.body pool.query('INSERT INTO users (name, email) VALUES ($1, $2)', [name, email], (error, results) => { if (error) { throw error } response.status(201).send(`User added with ID: ${result.insertId}`) }) }
Поместите обновленные данные в существующий пользователь
A/Users/: id конечная точка также возьмет два http-запроса – той мы создали для getUserbyId, а также поставить, чтобы изменить существующий пользователь. Для этого запроса мы будем комбинировать то, что мы узнали в Get и Post, чтобы использовать предложение обновления.
Стоит отметить, что поставил это idempotent , что означает тот же тот же звонок, может быть сделан снова и снова и будет создавать тот же результат. Это отличается от поста, в котором точно такой же повторяющийся вызов непрерывно сделает новые пользователи с теми же данными.
const updateUser = (request, response) => { const id = parseInt(request.params.id) const { name, email } = request.body pool.query( 'UPDATE users SET name = $1, email = $2 WHERE id = $3', [name, email, id], (error, results) => { if (error) { throw error } response.status(200).send(`User modified with ID: ${id}`) } ) }
Удалить пользователя
Наконец, мы будем использовать предложение Delete On/Users/: ID, чтобы удалить определенный пользователь по ID. Этот звонок очень похож на нашу функцию GetUSerbyId ().
const deleteUser = (request, response) => { const id = parseInt(request.params.id) pool.query('DELETE FROM users WHERE id = $1', [id], (error, results) => { if (error) { throw error } response.status(200).send(`User deleted with ID: ${id}`) }) }
Экспорт
Чтобы получить доступ к этим функциям из index.js, нам нужно будет экспортировать их. Мы можем сделать это с Module.exports, создавая объект функций. Поскольку мы используем синтаксис ES6, мы можем написать GetUsers вместо GetUsers: GetUsers и так далее.
module.exports = { getUsers, getUserById, createUser, updateUser, deleteUser, }
Вот наши полные Queries.js файл.
const Pool = require('pg').Pool const pool = new Pool({ user: 'me', host: 'localhost', database: 'api', password: 'password', port: 5432, }) const getUsers = (request, response) => { pool.query('SELECT * FROM users ORDER BY id ASC', (error, results) => { if (error) { throw error } response.status(200).json(results.rows) }) } const getUserById = (request, response) => { const id = parseInt(request.params.id) pool.query('SELECT * FROM users WHERE id = $1', [id], (error, results) => { if (error) { throw error } response.status(200).json(results.rows) }) } const createUser = (request, response) => { const { name, email } = request.body pool.query('INSERT INTO users (name, email) VALUES ($1, $2)', [name, email], (error, results) => { if (error) { throw error } response.status(201).send(`User added with ID: ${result.insertId}`) }) } const updateUser = (request, response) => { const id = parseInt(request.params.id) const { name, email } = request.body pool.query( 'UPDATE users SET name = $1, email = $2 WHERE id = $3', [name, email, id], (error, results) => { if (error) { throw error } response.status(200).send(`User modified with ID: ${id}`) } ) } const deleteUser = (request, response) => { const id = parseInt(request.params.id) pool.query('DELETE FROM users WHERE id = $1', [id], (error, results) => { if (error) { throw error } response.status(200).send(`User deleted with ID: ${id}`) }) } module.exports = { getUsers, getUserById, createUser, updateUser, deleteUser, }
Завершение настройки
Теперь, когда у нас есть все наши вопросы, последнее, что нам нужно сделать, это потянуть их в файл index.js и сделать конечные маршруты для всех функций запроса, которые мы создали.
Чтобы получить все экспортированные функции из Queries.js, нам потребуется файл и присваиваю его переменной.
const db = require('./queries')
Теперь для каждой конечной точки мы установим метод HTTP-запроса, путь URL конечной точки и соответствующую функцию.
app.get('/users', db.getUsers) app.get('/users/:id', db.getUserById) app.post('/users', db.createUser) app.put('/users/:id', db.updateUser) app.delete('/users/:id', db.deleteUser)
Вот наш полный index.js, точка входа сервера API.
const express = require('express') const bodyParser = require('body-parser') const app = express() const db = require('./queries') const port = 3000 app.use(bodyParser.json()) app.use( bodyParser.urlencoded({ extended: true, }) ) app.get('/', (request, response) => { response.json({ info: 'Node.js, Express, and Postgres API' }) }) app.get('/users', db.getUsers) app.get('/users/:id', db.getUserById) app.post('/users', db.createUser) app.put('/users/:id', db.updateUser) app.delete('/users/:id', db.deleteUser) app.listen(port, () => { console.log(`App running on port ${port}.`) })
Теперь только с этими двумя файлами у нас есть сервер, база данных и API все настроен. Вы можете запустить сервер, снова нажав index.js.
node index.js App running on port 3000.
Теперь, если вы идете в http://localhost: 3000/пользователи или http://localhost: 3000/пользователи/1 Вы увидите ответ JSON из двух запросов GET. Но как мы можем проверить наш пост, поставить и удалить запросы?
Это можно сделать с Curl , инструмент командной строки, который уже доступен на вашем терминале. Ниже приведены примеры, которые вы можете запустить в командной строке, чтобы проверить все протоколы.
Убедитесь, что сервер активно работает в одном окне терминала, когда вы запускаете эти команды в отдельном окне.
СООБЩЕНИЕ
Добавьте нового пользователя с именем Elaine и Email Elaine@example.com.
curl --data "name=Elaine&email=elaine@example.com" http://localhost:3000/users
ПОМЕЩАТЬ
Обновите пользователя с ID 1, чтобы иметь имя Kramer и Email Kramer@example.com.
curl -X PUT -d "name=Kramer" -d "email=kramer@example.com" http://localhost:3000/users/1
УДАЛЯТЬ
Удалите пользователя с ID 1.
curl -X "DELETE" http://localhost:3000/users/1
Заключение
Поздравляем, теперь у вас есть функционирующий сервер API, работающий на Node.js и подключен к базе данных Active PostgreSQL. В этом руководстве мы узнали, как установить и настроить PostgreSQL в командной строке, как создавать пользователей, базы данных и таблиц и как запустить команды SQL. Мы также узнали, как создать Express Server, который может обрабатывать несколько методов HTTP и как использовать модуль PG для подключения к PostgreSQL из узла.
С этим знанием вы должны быть в состоянии построить этот API и использовать его для своих личных или профессиональных проектов развития.
Plug: Logrocket, DVR для веб-приложений
https://logrocket.com/signup/
Logrocket Это инструмент для ведения журнала Frontend, который позволяет вам повторить проблемы, как если бы они произошли в вашем браузере. Вместо того, чтобы угадать, почему случаются ошибки, или просят пользователей на скриншоты и журнал свалки, Lognocket позволяет воспроизвести сеанс, чтобы быстро понять, что пошло не так. Он отлично работает с любым приложением, независимо от основ и имеет плагины для регистрации дополнительного контекста из Redux, Vuex и @ Ngrx/Store.
В дополнение к регистрации действий и состояния Redux, Lognocket Records Console Logs, ошибки JavaScript, Stacktraces, Networks/Ответы с заголовками + тел, метаданные браузера и пользовательские журналы. Он также привлекает инструменты DOM для записи HTML и CSS на странице, воссоздая Pixel-Perfect видео даже самых сложных приложений для одной страницы.
Попробуйте бесплатно.
Пост Настройка спокойного API с Node.js и PostgreSQL появился первым на Logocket blog .
Оригинал: “https://dev.to/bnevilleoneill/setting-up-a-restful-api-with-node-js-and-postgresql-1jbf”