Ich möchte eine Laravel 5.1-Anwendung für Web und APIs für mobile Anwendungen erstellen. Ich möchte JSON für eine API-Anfrage zurückgeben und für den Webbrowser anzeigen. Zur Zeit habe ich verschiedene Routen und verschiedene Controller eingerichtet. Bei diesem Ansatz wiederhole ich den Code. Ich weiß nicht, was der beste Ansatz ist, um diese Architektur zu entwerfen. Außerdem habe ich einige ähnliche Threads durchlaufen, die die Verwendung von angular.js für den Webbrowser empfehlen.Wie Laravel 5.1-Anwendung für Web-Client und native mobile Anwendungen zu entwickeln
Antwort
Ein Weg wäre content negotiation Ansatz zu verwenden. Sie würden Header übergeben Accept: application/json
und dann Ihre App würde Antwort im JSON-Format zurückgeben. Einige Proxy-Server respektieren die Inhaltsverhandlung jedoch nicht. Dann würde Ihre App durchbrechen (Sie können mehr darüber lesen, warum Drupal die Inhaltsverhandlung here fallengelassen hat).
Eine andere Möglichkeit ist, tu etwas GET
Variable gewünschten Format zurück, zum Beispiel:
Route::get('/api/product', ['as' => 'product', function(){
return App::make('ProductController')->index('json');
}]);
public function index($format) {
// Your controller code
if ($format == 'json') {
// return JSON
}
// return HTML
}
Oder Sie können URI analysieren direkt und sehen, ob: /api/product?format=json
Auch Sie können Variablen aus /api
Anrufe passieren Es beginnt mit /API
(nicht zu empfehlen). Meine Auswahl wäre Content Negotiation und/oder format
GET Variable.
Sie können zwei grundlegende Ansätze haben:
- getrennt halten Routen und Controller, sondern alle Ihre gemeinsamen Controller-Code in einen Dienst bewegen. Dies ist wahrscheinlich die sauberste und flexibelste Lösung, da es die Aktualisierung von API- und Webmethoden in Zukunft sehr einfach macht.
- Oder Sie können sowohl API-und Web-Anfragen an den gleichen Controller, übergeben Sie das Request-Objekt hinein und dann basierend auf einigen Anfrage-Attribut entscheiden, welche Antwort, json oder html zurückzugeben.
Für den zweiten Ansatz könnte man zum Beispiel tun es wie folgt aus:
// web controller
Route::resource('product', 'ProductController');
// api controller
Route::group(['prefix' => 'api'], function() {
Route::resource('product', 'ProductController');
});
// and in the ProductController you have
public function index(Request $request)
{
// do some stuff...
if ($request->segment(1) === 'api') { // route prefix was api
// return json
} else {
// return the view
}
}
Sie könnten auch $ request-> wantsJson() Methode zu überprüfen, auf Accept:
Header oder Sie können eine spezielle GET verwenden passieren Variable (zB ?_format=json
) mit allen API-Aufrufen zur Definition des Antwortformats sollte json sein, wie bereits von @Bogdan Kuštan vorgeschlagen. IMHO, wenn Sie bereits API-Präfix auf Ihren URLs verwenden, ist es zuverlässiger und sauberer, nur um das zu überprüfen.
Danke @ivanhoe. Ich benutze Repository-Designmuster und verschiebe dort meine gemeinsame Logik. Geben Sie auf der Steuerung an, dass Sie die Schnittstelle andeuten und auf die üblichen Methoden zugreifen. – Ashish
- 1. Getstream für mobile Anwendungen
- 2. Entwickeln mobile App für Android
- 3. Entwickeln von Luft (Flex) -Anwendungen für Android und Desktop
- 4. Responsive Design vs Native Mobile Native APP?
- 5. OAuth 2.0 für Desktop- und mobile Anwendungen
- 6. Interaktionsdesign für mobile Anwendungen und Datenbanken
- 7. Entwickeln stromverbrauchsbewusster Anwendungen
- 8. SAPUI5-Bibliotheken für mobile Anwendungen
- 9. Welche Möglichkeiten gibt es, um Anwendungen für Sharepoint zu entwickeln?
- 10. Laravel: Mobile und Web App
- 11. Wie man die Verzeichnisstruktur entwickelt, um EJB-Anwendungen zu entwickeln
- 12. Native Compilation für C# Desktop-Anwendungen
- 13. Werden html5 und Javascript native Anwendungen ersetzen?
- 14. Native mobile Anwendung mit Google Dart Sprache
- 15. Beispiel Cordova mobile Anwendungen
- 16. OAuth Vs SAML für moderne Web- und Native-Anwendungen
- 17. Was ist die am meisten "Spaß" mobile Plattform für heute zu entwickeln?
- 18. Entwickeln von Anwendungen für Windows Embedded Compact 2013
- 19. Wie native C++ - Anwendungen mit HTML/CSS UI erstellen?
- 20. Planen der Ausführung von Windows Mobile-Anwendungen
- 21. Entwickeln von Websites mit Flex-Anwendungen
- 22. Websocket oder Http, um eine mobile App zu entwickeln?
- 23. Laravel RESTful API-Authentifizierung für mobile App
- 24. ein Windows Mobile Component Entwickeln für Thumbnails Anzeige
- 25. Werkzeuge WPF oder Silverlight-Anwendungen entwickeln
- 26. Soll ich jetzt Facebook-Anwendungen entwickeln?
- 27. Wie für verschiedene Umgebungen zu entwickeln
- 28. Wie zu entwickeln Asp.Net-Anwendung für Ubuntu mit vs 2015
- 29. Ist es möglich, DirectX-Anwendungen in Linux zu entwickeln?
- 30. wie zu entwickeln Radio-Anwendung für iphone
Ich weiß nicht, Wetter das ist in Laravel oder nicht anwendbar, aber wir können Gruppen/Namespaces in Rubyonrails für den angegebenen Zweck erstellen. Überprüfen Sie diese http://laravel-tricks.com/tricks/route-group-namespacing –