Архитектура потребителей и поставщиков приложений 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), когда пользователь добавляет новый запрос.