OlegOleg1980
@OlegOleg1980
программист

Как сделать api для микросервисов на php?

Добрый день!
Вопрос в теме - как сделать api шлюз для микросервисов?
Мне не совсем понятно как устроена вся цепочка до сервиса: составляющие, назначение, транспорты и т.д. Какие технологии/стеки лучше применять?
Информация в гугле как то в общем написана, без особых подробностей, поэтому требуется "разжевать".
Спасибо!

Upd: Добавил картинку.

94efe7c5420b4550977f263c6ded99f2.jpg

Интересуют структура и связи блока api шлюз(выделено желтым).
  • Вопрос задан
  • 2826 просмотров
Пригласить эксперта
Ответы на вопрос 4
webinar
@webinar Куратор тега PHP
Учим yii: https://youtu.be/-WRMlGHLgRg
api - слишком широкое понятие, как и зоопарк микросервисов на php. Поэтому Вы и не можете найти информацию. Это как искать "сделать что-то что будет обращаться куда-то, как-то получать данные от маленькой как-то написанной программы" Это ни о чем. Конкретизируйте задачу. О каких микросервисах речь, какой способ передачи данных по api (их немало, xml, json). Ну и наконец, что планируете использовать, так как это может быть любой язык программирования, в этом и суть api.
Если все это Вы и пытаетесь найти, тогда опишите саму задачу, например "делаю мобильное приложение, есть вот такое api, что лучше использовать".
Ответ написан
@marataziat
Джангист-тракторист
nginx, haproxy, apache, docker
Ответ написан
Комментировать
DarkRaven
@DarkRaven
разработка программного обеспечения
Если сказать грубо, то API в общем понимание - это и есть набор микросервисов (далее МС).
Т.е., скажем у нас есть API для получения списка пользователей, тогда, в терминах МС, у нас есть МС "Список пользователей", цель которого следует из названия. Общая концепция - иметь минимальное количество качественных действий. Отсюда и его преимущества и недостатки ( https://ru.wikipedia.org/wiki/Микросервисы ) .

В целом по технологиям и стекам - вполне можно и на PHP, используя ту же Symfony/Silex/Slim/Equip и т.д. Тут, на чем удобно, то и используйте. Я вообще не слышал, чтобы разрабатывали конкретные решения под нужды МС.
Если смотреть на Java, я видел не мало примеров на spring-boot, на .NET - .net core думаю будет идеален (asp.net core).

В качестве протоколов обычно выбирается JSON, но никто не будет вас ругать, если вы будете использовать protobuf или вообще, что-то свое. У каждого свои нюансы, в общем.

Говоря про общие моменты, обычно, рядом с МС всегда "употребляют" тот же Docker и автоматические средства развертывания. Т.е. по факту - МС, зачастую, цельный блок инфраструктуры, сразу же готовый для использования после автоматического развертывания.

UPD. Еще, крайне важный момент для МС - это мониторинг работоспособности. Нельзя им пренебрегать. На хабрахабре была не так давно целая статья про мониторинг.

UPD2. Шлюзом-аггрегатором может быть что угодно, более того, его может и не быть. Самый простой вариант шлюза - это NGINX, где можно сделать проксирование запросов, в зависимости от запрашиваемого URL.
Ответ написан
mitaichik
@mitaichik
Учитывая ваши комментарии к другим ответам, вам нужно просто сконфигурировать nginx.

Он принимает запросы от клиентов, и в соответстивии с конфигм, отсылает их куда нужно. Будь то другая машина, разные процессы, или несколько php-fpm пулов - настроить можно как угодно.

Что-то типа

location /match/here1 {
    proxy_pass 127.0.0.1:8081
}

location /match/here2 {
    proxy_pass 127.0.0.1:8082
}


Тут, например, запущенно несколько процессов, которые слушают разные порты. Разыне uri ведут на соответсвующий процесс, которые может обрабатывать данный запрос. Изменив ip на удаленную машину можно направить запрос на другую машину.

Это просто пример, в реальной конфигурации, скорее всего, придется заголовки пробрасывать, а в случае других машин - обеспечивать безопасный канал (если требуется), но в целом все делается крайне просто. Вот линк devacademy.ru/posts/razbiraemsya-v-http-proksi-ngi...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы