2016-04-21 7 views
2

Ich habe eine MVC PHP-Webanwendung, die eine REST-API aufrufen muss. Ich bin unklar, ob ich die API von meinem Controller oder vom Modell aufrufen sollte? Wenn ich verschiedene Ressourcen betrachte, bekomme ich gemischte Informationen. Ich nehme an, dass es vom Model sein sollte, da alles, was ich gerade mache, mit Daten zu tun hat und das bis zum Controller richtig ist?Aufruf einer REST-API von einer MVC-Webanwendung

Einige weitere Details zu klären. Ich habe die volle Kontrolle über die REST-API, die ich gerade entwickle und auch in PHP bin. Die API wird jedoch auch von einer iOS- und Android-Companion-App, die von meinem Team erstellt wurde, und einigen anderen Apps, die auf proprietären Geräten laufen, genutzt.

Der ursprüngliche Plan war, dass die Web-App nicht die API nutzen und direkt in die DB gehen würde, um irgendwelche Overhead zu schneiden, aber mehrere Debatten später und ich neige zur Verwendung der API.

+1

Die eigentliche Frage ist: Soll ich es in meiner App oder einer separaten Code-Basis haben? (meiner Meinung nach) –

+2

Ich denke wirklich, dass Sie "Dienste" (Klassen, die Business-Logik behandeln) verwenden sollten. Dieser Dienst sollte Aufrufe von api-s verarbeiten oder die Datenbank abfragen usw. –

Antwort

0

Sie sollten die Web-API vom Controller aufrufen. Das Modell ist, wie die Daten vom Controller an die View übergeben werden. Das Modell sollte nur Daten und keine Geschäftslogik haben.

Wenn Sie die Antwort vom Web-API zu erhalten, sollten die Daten in das Modell gesetzt werden und an die Ansicht.

Das Modell, die Ansicht und der -Controller bildet die MVC Muster. Der Controller ist dafür verantwortlich, dass die Daten in das Modell eingegeben und an die View übergeben werden. Die Ansicht übernimmt das Modell und zeigt die Daten an, so wie es angegeben wurde. Es gibt keine Geschäftslogik im Modell oder in der Ansicht.

Idealerweise würden Sie Ihren API-Code in eine Klassenbibliothek einfügen, die der Controller verwendet. Auf diese Weise können Sie die Geschäftslogik von der Website in eine separate Komponente trennen.

1

Ich würde von dem Modell aufrufen, ob die REST-Ressource eine Repräsentation des Modells ist oder ob Sie diese Funktionalität über mehrere Controller hinweg benötigen.

Anruf von der Steuerung, wenn es nicht 100% spezifisch für die Modelldarstellung ist oder wenn es nur für die Steuerung/Ansicht wichtig ist, mit der Sie arbeiten.

+0

Das Modell sollte Daten enthalten, keine Logik. Der Web-API-Code könnte in eine Klassenbibliothek eingefügt und dann in Controllern in der gesamten Anwendung wiederverwendet werden. –

+1

Ich stimme zu. Die Frage war so vage, dass ich nicht sicher war, ob sie sich auf die Population des Modells bezog oder nicht. Ich gehe auch davon aus, dass er/sie keinen direkten Zugriff auf die API hat, oder dass er in einer anderen Sprache ist, etc. Setzen Sie die Methoden 'populateModelById' nicht auf Controller oder Sie müssen sie alle wiederholen der Ort. * Idealerweise sollten sie weder im Modell noch im Controller * enthalten sein, aber dies könnte als nicht im Rahmen dieser Frage liegend betrachtet werden. –

+0

Ich habe meiner Frage ein paar weitere Details hinzugefügt. Ich habe Kontrolle über die API. Das Problem mit der Ausgliederung in die eigene Klassenbibliothek ist, wie die Apps diese Klassen nutzen. – Runicode