Расширение существующего RESTful API с помощью Node.js - PullRequest
0 голосов
/ 19 октября 2018

В настоящее время я запускаю веб-службу в контейнере сервлетов Apache Tomcat.Веб-служба имеет базовый URL-адрес и предоставляет данные моих приложений, используя следующую структуру:

http://[hostname]:[port]/path/to/root/[db_table_name]/[primary_key]?fields=name,...

HTTP-запрос GET к URL-адресу, подобному приведенному выше, возвращает строку в формате JSON.

Хотя документация для моего приложения описывает это как API RESTful, я запутался, потому что у меня сложилось впечатление, что настоящие API RESTful не используют строки запросов.Скорее, насколько я понимаю, настоящий restful API обеспечивает единую структуру в форме конечных точек ресурса.

Мои вопросы касаются того, как я могу создать собственный API для использования существующего API с помощью Node.js.Я не хочу переписывать логику приложения или вызовы базы данных;Мне просто нужно знать, как я могу создавать вызовы API с помощью Node.js (возможно, с помощью Express или какой-либо другой инфраструктуры) и позволить существующему API обрабатывать запрос.

Например, я мог бы написать код Node.js, используя модуль Express, имеющий несколько маршрутов, эти маршруты обрабатывали бы запросы клиентов, которые в свою очередь вызывали бы существующий API (то есть / path / to / root / [table_name)] / [pk] ... и вернуть ответ.

  1. Если мой сервер Apache Tomcat прослушивает порт 8080, как мне развернуть сервер Node.js для прослушивания на другом порту, а затем перенаправитьзапросы к существующему URL-адресу WS на порту 8080.
  2. Поддерживает ли инфраструктура Express явное указание корневого пути (например, http://localhost:3000/path/to/root/[table_name]/[pk]) в качестве корневого пути по умолчанию?
  3. Наконец, язнаю, что REST API поддерживают операции CRUD. В случае метода POST, имеет ли Express (или Node.js) встроенную логику для обработки дублированных запросов POST, чтобы дублированные записи не создавались в базе данных.

Я читаю различные статьи и учебники по REST, но думаю, что что-то упустил. Любая информация или совет, которые могут привести меня в правильном направлении, могуточень цениться.

1 Ответ

0 голосов
/ 20 октября 2018

здесь есть что рассказать, но я постараюсь охватить ваши три вопроса.Поскольку вы упомянули об использовании Express, я отвечу, предполагая, что Express - это используемая вами среда.

  1. Если вы используете Express, вы можете выбрать порт для прослушивания при запуске сервера., так что вы можете выбрать любой порт, который вам нравится в этой точке (см. здесь ).Если вам нужно перенаправить запрос, вы можете легко сделать это с помощью res.redirect() (см. здесь ).Однако вы также можете вызвать другой веб-сервис напрямую, получить данные и вернуть их клиенту, а не перенаправлять их, если хотите.Однако для выполнения http-запросов в node.js потребуется еще немного кода.

  2. Я не уверен на 100%, является ли это ответом на ваш вопрос, но есть способы добавить«базовый путь» или пространство имен для всех ваших маршрутов.Я нашел этот пример , где используются различные пространства имен, но в вашем случае вам нужен только один, который применяется ко всем маршрутам.

  3. Я не думаю, что есть встроенное-в способ сделать это.Лучшее, что я могу придумать, - это потенциально создать какой-то идентификатор для запроса, чтобы, если он был отправлен дважды, вы могли использовать его для проверки, но это далеко от идеала.

Я бы хотелдобавить, что я не уверен, откуда взялась идея, что параметры запроса не являются RESTful?Я думаю, что параметры запроса в порядке, потому что именно так вы запрашиваете!В противном случае вы не сможете запросить правильные данные у вашего RESTful API.Допустим, у вас есть конечная точка / posts и вы хотите получать сообщения определенного пользователя (ID пользователя = 1).RESTful способ сделать это - отправить запрос GET в /posts?user=1.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...