Статьи

Подсказка: макет API REST с использованием json-сервера

Эта статья была рецензирована Vildan Softic . Спасибо всем рецензентам SitePoint за то, что сделали контент SitePoint как можно лучше!

Иногда вам нужно прототипировать внешний интерфейс вашего приложения без внутреннего интерфейса. Создание даже базового макета API для разработки может занять много времени. Библиотека json-server решает эту проблему для вас, предоставляя быстрый и простой способ создания сложных RESTful API для разработки и тестирования.

Этот быстрый совет научит вас создавать фиктивные REST API с помощью json-server , что позволит вам запустить и запустить полнофункциональный API всего за 30 секунд.

Предпосылки

Вы должны иметь базовые знания о принципах RESTful и о том, как использовать API.

Вам понадобятся следующие инструменты:

  • nodejs — json-сервер построен поверх nodejs.
  • curl — проверить маршруты вашего макета сервера.

Пользователи Windows: на странице загрузок curl доступны двоичные файлы curl в 32-разрядном и 64-разрядном вариантах, которые позволят вам следовать примерам, приведенным в этой статье.

В этом руководстве предполагается, что вы будете использовать терминал, похожий на bash.

Установка

Чтобы установить json-сервер, откройте свой терминал и введите:

$ npm install -g json-server

Это установит json-сервер глобально в вашей системе, чтобы вы могли запустить сервер из любого каталога, который вам нравится.

Ресурсы

В RESTful API ресурс — это объект с типом, связанными данными, связями с другими ресурсами и набором методов, которые работают с ним. Например, если вы создаете API для фильмов, фильм будет ресурсом. Вы можете применять операции CRUD к этому ресурсу, используя свой API.

Давайте создадим API с ресурсом /movies

Создание ресурса

Создайте файл с именем db.json

 {
  "movies": [
    {"id": 1, "name": "The Godfather", "director":"Francis Ford Coppola", "rating": 9.1},
    {"id": 2, "name": "Casablanca", "director": "Michael Curtiz", "rating": 8.8}
  ]
}

После сохранения файла запустите сервер с помощью следующей команды:

 $ json-server --watch db.json

Это оно! Теперь у вас есть API фильмов; Вы можете получать фильмы с этого сервера, добавлять новые фильмы, удалять фильмы и кучу других вещей.

Чтобы проверить наш фиктивный API, мы можем использовать curl для выполнения HTTP-запроса:

 $ curl -X GET "http://localhost:3000/movies"

Это вернет список всех фильмов, которые у вас есть на этом сервере. В приведенном выше случае вы получите два фильма. Теперь, чтобы получить фильм с идентификатором 1, просто укажите идентификатор в конце URI: http: // localhost: 3000 / movies / 1.

Чтобы добавить фильмы на сервер, вы можете отправить запрос POST в API с подробностями фильма. Например:

 $ curl -X POST -H "Content-Type: application/json" -d '{
  "id": 3,
  "name": "Inception",
  "director": "Christopher Nolan",
  "rating": 9.0
}' "http://localhost:3000/movies"

Это ответит новыми данными фильма. Чтобы убедиться, что запись была успешно добавлена, давайте попробуем получить фильм с идентификатором 3:

 $ curl -X GET "http://localhost:3000/movies/3"

Точно так же вы можете использовать другие HTTP-глаголы, такие как PUT и DELETE, для доступа и изменения данных на этом сервере. По соглашению POST используется для создания новых объектов, в то время как PUT используется для обновления существующих объектов.

Примечание. Для запросов PUT, POST и PATCH должен быть установлен заголовок Content-Type: application/json

Характеристики

json-server предоставляет множество полезных функций для макета API, которые вам нужно вручную построить на бэкэнде. Давайте рассмотрим некоторые из этих функций:

фильтры

Вы можете применить фильтры к вашим запросам, добавив их в URI в виде строки запроса. Например, если вы хотите получить подробную информацию о фильме с именем «Касабланка», вы можете отправить запрос GET на ваш URI ресурса, добавив знак вопроса (?), За которым следует имя свойства, по которому вы хотите выполнить фильтрацию, и его значение:

 $ curl -X GET "http://localhost:3000/movies?name=Casablanca"

Вы также можете объединить несколько фильтров, добавив амперсанд (&) между различными фильтрами. Например, если мы также хотим фильтровать по идентификатору в приведенном выше примере, мы могли бы использовать:

 $ curl -X GET "http://localhost:3000/movies?name=Casablanca&id=2"

операторы

API также предоставляет логические операторы для упрощения фильтрации. Вы можете использовать _gte_lte У вас также есть _ne

Например, если вам нужны все фильмы, рейтинг которых больше или равен 9:

 $ curl -X GET "http://localhost:3000/movies?rating_gte=9"

Обратите внимание, что вы можете объединить несколько операторов, используя знак амперсанда. Таким образом, чтобы получить все фильмы с рейтингом от 5 до 7, вы должны сделать следующий запрос:

 $ curl -X GET "http://localhost:3000/movies?rating_gte=5&rating_lte=7"

пагинация

В реальном сценарии вы будете иметь дело с большим количеством данных. Загрузка этих данных в куски размера укуса проста благодаря встроенной поддержке пагинации в json-сервере, которая фиксируется на уровне 10 элементов на странице.

Например, если вы хотите получить доступ к странице 3 вашего API фильмов, отправьте запрос GET:

 $ curl -X GET "http://localhost:3000/movies?_page=3"

На это ответят пункты 21-30.

Сортировка

Вы можете запросить отсортированные данные из вашего API, используя свойства _sort_order Например, если вы хотите, чтобы список фильмов сортировался по имени (в алфавитном порядке) в порядке убывания, вы отправите следующий запрос:

 $ curl -X GET "http://localhost:3000/movies?_sort=name&order=DESC"

Есть много других возможностей, которые предоставляет json-server. Вы можете подробно изучить эти и вышеупомянутые функции в документации по json-серверу .

Генерация фиктивных данных для вашего API

Тестирование внешних интерфейсов практически без данных в вашем API — это не весело. Вы можете создать пример данных для своего фиктивного API с помощью модуля, например faker.js .

Установите пакет, используя:

 $ npm install faker

Теперь создайте файл с именем fake-data-generator.js и введите в него следующее:

 var faker = require('faker');

var db = { movies: [] };

for (var i=1; i<=1000; i++) {
  db.movies.push({
    id: i,
    name: faker.random.words(),
    director: faker.name.firstName() + ' ' + faker.name.lastName(),
    rating: Math.floor(Math.random()*100+1)/10
  });
}

console.log(JSON.stringify(db));

Здесь мы создаем 1000 различных фальшивых записей в фильмах, а фейкер используется для генерации названий фильмов и режиссеров. Рейтинги создаются путем генерации случайного числа от 1 до 100 и деления на 10.

Чтобы создать файл db.json

 $ node fake-data-generator.js > db.json

Теперь у вас есть база данных 1000 фильмов. Теперь у вас есть большой объем поддельных данных, которые вы можете использовать для разработки и / или тестирования ваших приложений.

Вывод

Теперь вы сможете быстро создавать собственные макеты API и добавлять к ним тестовые данные. Библиотека json-server позволяет быстро создавать прототип внешнего кода, не тратя время (почти) на создание внутреннего интерфейса.

Этот инструмент станет частью вашего рабочего процесса, или у вас есть другой метод, который вы успешно использовали? Поделитесь своими мыслями и предложениями в комментариях ниже!