2017-01-05 2 views
0

Что такое «лучшая практика» для архитектуры API/бэкэнд для компаний с веб-сайтом и мобильным приложением?Общий API/сервер для веб-сайта и мобильного приложения?

Некоторые идеи архитектуры:

  1. Единый API, который проверяет, если запрос приходит через веб-браузер или мобильное приложение, а затем реагирует с HTML или JSON соответственно
  2. Два отдельных API-интерфейсов, один для веб-сайт (который отвечает HTML) и один для мобильного приложения (который отвечает JSON)
  3. Один JSON-API, который просто возвращает JSON. Веб-сайт (например, клиентский Javascript) будет отвечать за разбор и визуализацию этого JSON.

StackOverflow Пример

В качестве примера, рассмотрим подачи HTTP-GET "/ вопросы" запрос на StackOverflow. Первая архитектура, перечисленные выше, могут выглядеть следующим образом:

Веб-браузер:

  1. Типы пользователей в https://stackoverflow.com/questions
  2. сервер запрашивает базу данных по всем вопросам
  3. Сервер создает HTML-страницу, показывающую на все вопросы
  4. сервера отвечает на вопросы. html
  5. Клиентский веб-браузер предоставляет вопросы. html

Мобильное приложение

  1. Пользователь открывает мобильное приложение StackOverflow
  2. сервер запрашивает базу данных по всем вопросам
  3. сервер отвечает с данными JSON, содержащий все вопросы
  4. Client мобильное приложение разбирает данные JSON и дисплеи пользователю

ответ

1

Я разработчик в команде в Starbucks. Мы поддерживаем партнеров (сотрудников) магазина с помощью мобильных приложений и микросервисов. Мы не являемся командой потребителей/общественности, что означает, что наши приложения/службы предназначены только для внутреннего использования.

Мы реализуем шаблон «frontend for backends». У нас есть команда разработчиков API/платформы, отвечающая за создание микросервисов платформы/ядра. Подумайте о товаре, заказе, StockCount. У нас есть как веб-приложения, так и мобильные приложения, которые используют эти основные сервисы.

Для каждого веб-сайта и мобильного приложения/модуля у нас есть соответствующий NodeJS API, так что само приложение не связано с нашими API-интерфейсами платформы. Мы называем эти API-интерфейсы API/API для API платформы. Наши API-интерфейсы платформы - это Java/Kotlin, использующие Akka, Kafka, Docker и т. Д. И т. Д., А наши API-интерфейсы продуктов - это NodeJS и построены как простые/немые.

Причина этого «среднего слоя» API-интерфейсов продукта заключается в том, что мобильные/веб-приложения имеют определенные API-интерфейсы, которые могут поражать их особые потребности, а команды продуктов могут модифицировать свои API-интерфейсы NodeJS, поскольку они нуждаются в разрезе и кубиках данных и вызывать наши API-интерфейсы платформы. Это позволяет нашим продуктовым группам оптимизировать вызовы между мобильными/веб-серверами и серверами на их NodeJS API.

Mobile (App 1) => API Gateway => NodeJS (App 1) => API Gateway => API платформы 1, API 2, API 3 (поддержка всех приложений).

Когда мы только начали создавать мобильные и SPA-разработки, как мобильные, так и веб-сайты, используемые для прямого общения с нашими API-интерфейсами платформы. Это вызвало у нас некоторое горе, когда мы хотели внести изменения, и мобильные приложения не были разработаны лучше всего, и поэтому были тесно связаны с API.

Наличие уровня NodeJS позволяет их мобильным/веб-приложениям оставаться стабильными, одновременно подталкивая проблему к уровню NodeJS, что, по крайней мере, облегчает внесение изменений, и мы полностью контролируем развертывание.

Скучный ответ, извините :)

EDIT: Что касается трех ваших вопросов, я хотел бы рассмотреть эти антишаблоны и рекомендовал бы против смешения проблем.

API REST не должен быть связан с представлением (html, как вещи отображаются на странице), а скорее с раскрытием данных.

Предоставлено, что высказывание о мнениях похоже на ** дыры, у каждого есть один ... но исходя из моего опыта и лет чтения, я никогда не верну HTML в своих API, вот работа веб/мобильное приложение для отображения (разделение проблем, SRP, сделайте одно хорошо).

Смежные вопросы