Что такое API/REST API, NODE.js, Express?

Всем, доброго дня! Не так давно, я серьёзно задался вопросом, как разделить код в проекте и как происходит взаимосвязь проекта с базой данных. И тогда, я начал встречать такие аббревиатуры, как API, REST API, Node.js, Express… К сожалению, поиск в интернете не дал никаких положительных результатов. Я всё так же не понимаю до конца(кроме REST API. Его постепенно понимаю) что всё это такое и как это использовать, в каких ситуациях…. Я просмотрел почти весь русскоязычный интернет, но никак не могу найти ответ. Думаю уже серьёзно шерстить англоязычный сегмент. Проблема в том, что не знаю вообще что-это такое, а потому я разумеется не правильно задаю вопросы в поисковик и на форум. Мне приходят ни те ответы. Кто-то код начинает писать, объясняя что это, кто-то приводит аналогию с фруктами, машинами, не переходя на примеры, которые более связаны с web… Возможно вам учителям, стоило бы начать с проблемы, которые возникают в коде…? С дальнейшей припиской, что эту проблему можно решить с помощью node.js…. А эту проблему, с помощью express, а вот почему мы пришли к выводу, что REST API намного удобнее… Но это как мозайка… У вас могут быть в руках элементы, но вы не будете знать, что с ними делать… Или, к примеру, я могу отлично знать по отдельности, что такое callback, промисы, поллифилы, но не знать, как это связать, где использовать… Что делать со знаниями модулей и т.д.
Нет чёткого понимания использования знании javascript в написании API/REST API, NODE.js, EXPRESS…. Вот ещё один пример… node.js, express, REST API… Но до конца не понял, так что работает из них с базой данных? Ранее я слышал, что для связки VUE с базой, необходим node.js А недавно, я слышал, что это можно сделать при помощи REST API. … Думаю, что если были бы форматы видео/статей, ДО node.js ПОСЛЕ node.js и так далее, то это было бы понятнее
Проблема - > Решение. Такой подход…
P.S. Прошу вас, если не ответ, то скиньте пожалуйста ссылки(не важно на каком языке, русском или английском) на статьи, видео, которые смогли бы пролить свет на данные вопросы.

Я имел такую же фрустрацию когда разбирался в вопросе: никто не показывал картинку в общем виде. Нигде не нашел годного материала в той форме что хотелось бы. Пришлось собирать мозаику по частям.

nodejs
Это программа, интерпретатор js кода. Эта программа имеет API для доступа к системным ресурсам (может слушать и общаться по сети, подключаться к базам данных, читать-писать файловую систему, вызывать другие команды и кучу других вещей). API к системным ресурсам ты дергашь с помощью JS (так же как и API к возможностям браузера ты дергаешь через js).

У nodejs есть набор стандартных пакетов плюс можно установить пакеты из интернета. Пакеты предоставляют свои API для решения тех или иных задач. Считай абстракиции другого уровня.

expressjs
expressjs это nodejs пакет который запускает веб сетвер и предоставляет API для js где ты можешь функциями описать что отдавать клиенту на какой запрос. Работая с express ты моделируешь какие урлы есть у твоего приложения, какие http методы можно использовать для этих уров (post, get).

http api
В контекста nodejs/express это описание урлов и методов работы с ними. Клиентский код будет вызывать урлы с заранее описанными методами, передавать данные с клиента, а сервер будет ответственен за то чтобы данные обработать (положить куда-то или отдать другие данные в ответе на запрос).

Пример того как описание API выглядит словестно: https://github.com/podgorniy/todo-server#api
Код серверной реализации “размазан” по всему файлу, но файл небольшой и я специально писал его так чтобы можно было понять начинающим (т.е. не срезал углы и писал решение “влоб”). Вот кусочек: https://github.com/podgorniy/todo-server/blob/master/app.js#L64

А вот описание серверного API в моем другом проекте: https://github.com/podgorniy/media-manager/blob/master/src/server/routes.ts#L55. Как видишь это соотношение URL -> Функция (есть еще нюансы типа middleware, но это понять возможно).

REST api
Это http api, на модель которого наложены некоторые ограничения: какие http методы для каких операций использовать, и как строить url структуру. Про REST описано куча всего. REST это инструмент проведения границ между серверной и клиентской частью приложения. Зачастую одна команда работает над REST API, а вторая его потребляет. Команды заранее договариваются о структуре урлов, данных, какие методы использовать и какие параметры передавать, и потом могут работать параллельно каждая над своей частью.

в обработчике запроса expressjs ходишь в базу или на файловую систему, забираешь данные, обрабатываешь. Если нужно - возвращаешь часть данных на клиент с ответом.

В этом проекте хорошо это видно https://github.com/podgorniy/todo-server/blob/master/app.js#L64. С той разницей что я складываю данные в файлы на диск. Принципиальной разницы в подходе с диском или базой нет.

А в этом проекте я работаю с базой. Код изменяет доступ к коллеции, делает ее публичной. Код большой потому что я покрываю кучу нюансов типа: попытка сделать публичной коллекцию которая не моя или которая не существует. https://github.com/podgorniy/media-manager/blob/master/src/server/controllers/share-collection.ts. Эта функция по сути есть expressjs коллбек.


Давай дальше в диалоге выясним какие моменты требуют большего внимания

3 симпатии

NodeJs это серверная реализация языка программирования, которая обычно не в ходит ни в один учебный курс по JS. То есть - для того чтобы понять вот все это о чем автор пишет и научиться быстро с этим работать - надо иметь опыт работы или хотя бы хорошие знания в области бекенд-разработки (на любом языке программирования). Верно или нет?

Не совсем верно. В nodejs js язык такой же как и в браузере. А вот API которые можно использовать в браузере (типа DOM или localStorage) другие по по сравнению с API что дает nodejs.

Да. Нужно понимать механику работы элементов API которых дергается из nodejs. Но не обязательно иметь опыт в других языках чтобы разобраться с принципами работы этих элементов. Чистое знание языков не поможет, а опыт работы с базами или файловой системой в других языках может помочь. 100% понимания принципов работы файловой системы или базы данных не обязательно: его можно развить в процессе.

Дмитрий, добрый день! Я решил остановится с детальным изучением определения, что такое API/ Rest API. Ниже, я приведу некоторые свои мысли и мысли других людей, и задам некоторые уточнающие вопросы. Прошу на них ответить.

Что такое API ?

“API — это интерфейс взаимодействия между программами, а если говорить о WEB, то это интерфейс взаимодействия различных сайтов со сторонними приложениями. Используя API можно значительно расширить функционал взаимодействия с любым сайтом, у которого есть открытый API.”

Что такое REST API?

-Взаимодействие клиента и сервера посредством http запросов

Взаимодействие VUE с API?

  • Как я понял, API, как один из плюсов, помогает чётко разделить код на фронтенд( VUE) и бэкенд( API в том числе). Как происходит взаимодействие? Что мы пишем во фронтеде, а что в бэкенде?

Является ли API – объектом с необходимыми функциями.

- Если говорить о вебе, то это REST, SOAP API. Можно ли провести аналогию с событиями в DOM, где у клика, есть свой объект с методами, а у события клавиатуры, свой объект с методами?

Стек технологии необходимых для написания API.

  • К примеру, я понимаю, что необходимо знать всё о протоколе http. Что ещё?

В одном из определении API, был приведён пример загрузки на сайта скрипта прогноза погоды. Отсюда вопрос, API должен писать только тот, кто ПРЕДОСТАВЛЯЕТ программу, или и тот кто ПРИНИМАЕТ? Если и второй, то как объяснить, что некоторые API для подключения не требуют навык написания программы?

“Есть некая программная система, “черный ящик”. Его внутренности известны только производителю. Если никому, кроме производителя, туда доступаться не полагается, то и вопросов нет. А вот если производитель, по тем или иным причинам, хочет, чтобы другие могли написать программу, которая будет взаимодействовать с его “черным ящиком”, тогда он создает некоторый набор команд (функций), с пом. которого можно общаться с его системой. Фактически это некий спецязык, который понимает его система. Скажем, мне недостаточно тех окон, которые есть в Windows и я хочу создавать свои окна. Microsoft написало набор функций (Windows API), с пом. которых я могу такое окно создать. К этому API есть доступ из наиболее распространенных языков программирования (Delphi, C++ Builder и т.д.). Но в любом случае, чтобы пользоваться этим, я должен написать программу, в которой будут обращения к функциям API. Т.е. это инструмент именно для программистов.”

https://www.cyberforum.ru/programming-theory/thread689889.html

По этой фразе,
А вот если производитель, по тем или иным причинам, хочет, чтобы другие могли написать программу, которая будет взаимодействовать с его “черным ящиком”, тогда он создает некоторый набор команд (функций), с пом. которого можно общаться с его системой.
, хотелось уточнения, с примерами. Что значит, создаёт набор функции? Каким образом?

А это фрагмент из статьи на Хабре!

Допустим, я решила подключить подсказки из Дадаты к своему интернет-магазинчику, чтобы пользователь легко ввел адрес доставки.
Я подключаю подсказки по API. И теперь, когда пользователь начинает вводить адрес на моем сайте, он видит подсказки из Дадаты. Как это получается:

Он вводит букву на моем сайте

Мой сайт отправляет запрос в подсказки Дадаты по API

Дадата возвращает ответ

Мой сайт его обрабатывает и отображает результат пользователю

Про http протокол правильно. Но кроме протокола есть ряд других ограничений которым REST должен следовать чтобы быть RESTом: https://en.wikipedia.org/wiki/Representational_state_transfer#Architectural_constraints

На фронте ты пишешь AJAX запросы. На сервере функции обработки запросов.

Я считаю что параллель с объектами вводит в заблуждение и нее не стоит придерживаться.

Но в целом мышление смотрит в верном направлении. DOM API служит той же цели что и REST API - предоставляет интерфейс для получения данных и изменения данных в системе.

Всего не нужно знать. Лучше иди от обратного: возьми готовый API и пойми что нужно понимать чтобы написать такой же. Пример в моем препозитории достаточно мал чтобы это сделать.

Если ты метишь в REST api, то нужно знать ограничения REST. Я бы посоветовал описать пару api как понимаешь а потом читать теорию как должно быть. Теория часто говорит о таких вещах, о которых новички и не задумывались и не могут себе верно представить если не имеют опыта. Поэтому теорию проще понимать когда уже есть базовое понимание практики.

API однозначно пишется только тем кто предоставляет. В этом суть API - предоставить доступ. Другой вопрос что этот же человек/команда/компания может быть и потребителем своего же API.

API - Application Programming Interface. Т.е. это интерфейс для программ. Что подразумевает что потребитель будет писать программу.

REST построен на принципах http протокола. Любая система, умеющая работать с этим протоколом сможет реализовать своего “клиента” для этого API. А .NET предоставляет API на уровне объектов и их методов в предоставляемой библиотеке.

Некоторые сайты называют саму возможность взаимодействовать с ними как API. Например google analytics: ты подключаешь скрипт на страницу, меняешь строку параметра и получаешь интеграцию своего сайта с гугл аналитикой. API ли это? Да. Много ли тут программирования - нет.

Например у этого сайта (у форума) есть REST API. REST API - описано на уровне http протокола. Кому-то это неудобно и он описывает npm модуль. Этот модуль используя API для работы с HTTP и знание о структуре REST API форума, предоставляет функции и объекты, манипулируя которыми пользователь пакета будет управлять сайтом.

Второй пример - у тебя есть десктопное приложение на виндоус. В приложении ты описываешь как реагировать на некоторые сигналы, посылаемые операционной системой (через API самой операционной системы). А потом пишешь пакет-библиотеку например для .net вызывая функции из которой пользователь библиотеки может посылать сигналы твоему приложению. Тут, разумеется все будет работать только если оба приложения на одной машине и запущены.

По нему есть вопрос? По тексту написано все верно.

1 симпатия