Архитектура потребителей и поставщиков приложений Laravel

Я использую Laravel для создания приложения, которое помогает пользователям находить поставщиков услуг. Там будут 2 приложения, такие как Uber, 1 для пользователей и 1 для поставщиков. Пользователь выполнит запрос и в зависимости от запроса выбранные Провайдеры получат уведомление. Как и Убер.

Проблема заключается в том, как мне ее создать. Что я придумал:

  • 2 APPS: У вас есть 2 приложения Laravel с общим db. Но как я могу уведомить поставщиков, когда Пользователь генерирует запрос? Изменяется только БД, поэтому как я могу сообщить поставщику приложений, что пользовательское приложение сгенерило запрос?

  • Одиночное приложение 2 FrontEnds: У вас есть одно приложение Laravel и 2 передних конца. В Play Store будут отдельные приложения, но одно серверное приложение. Как я могу это сделать?

Есть ли лучшее решение для этого подхода? Как Uber делает то же самое?

Ответы

Ответ 1

Я бы предложил вам использовать данную услугу, например PubNub (см. демонстрацию).

Таким образом, вы можете сохранить свою Server-Development, а также Android-пример Вы просто используете его в своем APP следующим образом:

dependencies {
    ....
    compile 'com.pubnub:pubnub:3.7.4'
    //'com.pubnub:pubnub-android-debug:3.7.+' For the debug version
}

и

import com.pubnub.api.*;
import org.json.*;

Pubnub pubnub = new Pubnub("demo", "demo");

try {
  pubnub.subscribe("my_channel", new Callback() {
      @Override
      public void connectCallback(String channel, Object message) {
          pubnub.publish("my_channel", "Hello from the PubNub Java SDK", new Callback() {});
      }

      @Override
      public void disconnectCallback(String channel, Object message) {
          System.out.println("SUBSCRIBE : DISCONNECT on channel:" + channel
                     + " : " + message.getClass() + " : "
                     + message.toString());
      }

      public void reconnectCallback(String channel, Object message) {
          System.out.println("SUBSCRIBE : RECONNECT on channel:" + channel
                     + " : " + message.getClass() + " : "
                     + message.toString());
      }

      @Override
      public void successCallback(String channel, Object message) {
          System.out.println("SUBSCRIBE : " + channel + " : "
                     + message.getClass() + " : " + message.toString());
      }

      @Override
      public void errorCallback(String channel, PubnubError error) {
          System.out.println("SUBSCRIBE : ERROR on channel " + channel
                     + " : " + error.toString());
      }
    }
  );
} catch (PubnubException e) {
  System.out.println(e.toString());
}

Если вы ищете идеи, как это делает Uber, посмотрите учебник "Набор решений для мобильных решений PubNub"

Итак, я надеюсь, что смогу ответить, как Убер делает это и как вы можете сделать это лучше: -)

Ответ 2

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

"Реальные" приложения работают только как средний уровень и используют этот API.

Например, вы можете настроить Angular Приложения. Если вы используете nginx, вы можете определить разные местоположения для домена. Таким образом, все запросы, начинающиеся с "api", направляются в ваше приложение Laravel. Остальное направлено на ваше статическое приложение Angular.

{
    listen 80;
    server_name customer.com;

    location /api{
        root /var/www/api;
    }

    location / {
        root /var/www/static/customer;
    }
}

{
    listen 80;
    server_name internalarea.com;

    location /api{
        root /var/www/api;
    }

    location / {
        root /var/www/static/restricted;
    }
}

https://www.digitalocean.com/community/tutorials/understanding-nginx-server-and-location-block-selection-algorithms

Если вы создаете свои интерфейсные приложения также с Laravel, API становится собственным URL-адресом, который используется внешними системами. Для выполнения этих запросов мне нравится использовать Zend\Http\Client, который очень удобен.

Ответ 3

Если вы хотите разработать приложение для пользователя normar и для провайдера.

Тогда я предлагаю вам для разработки 2-х отдельных приложений и одного сервера (никогда не создавайте разные серверы для любого приложения)

Или вы можете назначить типы пользователей во время регистрации.

Ответ 4

Вы должны разработать один общий API и два приложения, такие как Uber. Или вы можете создать только одно приложение как для вендора, так и для покупателя, как eBay. Вы должны использовать прослушиватель на вашем сервере, поэтому всякий раз, когда срабатывает событие, вы должны отправлять такие уведомления. Взгляните на шаблон оформления слушателей.

Ответ 5

Поскольку существует единственная (база данных), лучше использовать одно бэкэнд-приложение. Вы можете отправить push-уведомление поставщикам (приложение для Android), когда пользователь добавляет новый запрос.