[Frage] Repository als Webservice (Rest API) nutzen [Gelöst] TYPO3-Version: 9.5.11

  • typo3dev_extbase typo3dev_...
    TYPO3-Anwärter
    0 x
    6 Beiträge
    0 Hilfreiche Beiträge
    11. 12. 2019, 07:37

    Guten Morgen,

    ich möchte eine Erweiterung auf Extbase-Basis entwickeln, die als Repository statt einer Datenbank ein Webservice bzw. eine Rest API zu einer externen Application nutzt. Also im Grunde auf die Datenbank der externen Anwendung zugreifen (die API besteht bereits). Der Request erfolgt über eine curl-Funktion und da ich recht neu im entwickeln von Extbase-Erweiterungen bin, stellt sich mir die Frage wo ich bestenfalls die Funktion für den CurlRequest erstelle (im Model oder eher im Repository ? ). Wie sieht dann das Zusammenspiel zwischen Model und Repository aus ? Der Controller erhält ja im Endeffekt dann die notwendigen Daten aus dem Repository/Model (diese dann aus der API bzw. der externen Anwendung). Die Daten sollen lediglich aus der API ausgelesen werden und nicht in der TYPO3-Datenbank gespeichert.
    Ich habe leider bisher keine wirklichen Ressourcen zu diesem Thema gefunden, Danke schonmal im Vorraus!

  • Teisinger Teisinger
    Jedi-Meister
    0 x
    445 Beiträge
    31 Hilfreiche Beiträge
    11. 12. 2019, 14:34 - Lösung

    Nein du brauchst nicht zwangsweiße ein Model oder einen Controller --- Ich würde es halt in eine HilfsClass auslagern, einfach nur um keine Verwirrung in die File/Directory Sturktur einer TYPO3 Extension rein zu bringen - kannst ja sowas machen wie Classes/Repository/Api/MyFetchExternalApiRepository.php oder so...

    Ob es sinnvoll ist für jedes Model ein Repo zu erstellen, hängt davon ab wie umfangreich deine Repos werden würden bzw. wie du es am ende Nutzen willst... flexibler und sauberer wäre es wohl aufgeteilt - würde ich mal so meinen :) .

    Ich würde eventuell noch die Caching API von TYPO3 verwenden, damit du nicht 10 mal die exakt selbe API ansprechen musst (da du ja meintest du brauchst das an verschiedenen Orten).
    https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/CachingFramework/Index.html

    Aber wie immer: Es hängt ganz stark davon ab was du dann am Ende damit erreichen willst...

    https://github.com/groundstack-org


  • 1
  • Teisinger Teisinger
    Jedi-Meister
    0 x
    445 Beiträge
    31 Hilfreiche Beiträge
    11. 12. 2019, 10:52

    Theoretisch im Controller selbst oder in einer HilfsClasse oder im Repository - kommt drauf an.
    Ich würde es wahrscheinlich in einer HilfsClass machen oder eine ApiRepository erstellen oder so.

    Bezüglich Curl:
    https://docs.typo3.org/m/typo3/reference-coreapi/8.7/en-us/ApiOverview/Http/Index.html

    https://github.com/groundstack-org

  • typo3dev_extbase typo3dev_...
    TYPO3-Anwärter
    0 x
    6 Beiträge
    0 Hilfreiche Beiträge
    11. 12. 2019, 11:19

    was ich vergessen hatte zu erwähnen:
    verwendet wird typo3 9.5.11

    Also am besten eine Funktion für den HttpRequest (im besten Fall mit der HttpRequest Api von Typo3) in eine HelperClass auslagern (oder ApiRepository? hier muss jedoch zusätzlich auch ein Model und Controller bestehen oder nicht ?) und im Controller darauf zugreifen. Wie gehe ich das am besten an, wenn ich die Daten für verschiedene Model verwenden möchte. Sprich ich hole mir Daten aus der externen DB für Veranstaltungen, von Personen, für einen Kalender, der mit Daten gefüllt werden soll, ...
    Ist es sinnvoll dann jeweils eine RepositoryApi Class für jedes Model zu erstellen ? (z.B. httprequest für Veranstaltungen erfolgt dann über die url http://www.mydomain.de/API/Events/getEventList, für personen über http://www.mydomain.de/API/Persons/getPersonList) und die allgemeine Verbindung dann über eine HelperClass aufzurufen ?

    Vielen Dank soweit für die Klarstellung und den sehr hilfreichen Link!

  • Teisinger Teisinger
    Jedi-Meister
    0 x
    445 Beiträge
    31 Hilfreiche Beiträge
    11. 12. 2019, 14:34

    Nein du brauchst nicht zwangsweiße ein Model oder einen Controller --- Ich würde es halt in eine HilfsClass auslagern, einfach nur um keine Verwirrung in die File/Directory Sturktur einer TYPO3 Extension rein zu bringen - kannst ja sowas machen wie Classes/Repository/Api/MyFetchExternalApiRepository.php oder so...

    Ob es sinnvoll ist für jedes Model ein Repo zu erstellen, hängt davon ab wie umfangreich deine Repos werden würden bzw. wie du es am ende Nutzen willst... flexibler und sauberer wäre es wohl aufgeteilt - würde ich mal so meinen :) .

    Ich würde eventuell noch die Caching API von TYPO3 verwenden, damit du nicht 10 mal die exakt selbe API ansprechen musst (da du ja meintest du brauchst das an verschiedenen Orten).
    https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/CachingFramework/Index.html

    Aber wie immer: Es hängt ganz stark davon ab was du dann am Ende damit erreichen willst...

    https://github.com/groundstack-org

  • typo3dev_extbase typo3dev_...
    TYPO3-Anwärter
    0 x
    6 Beiträge
    0 Hilfreiche Beiträge
    13. 12. 2019, 08:41

    Erreichen möchte ich im Endeffekt, dass gewisse Funktionen aus meiner externen Applikation aufgerufen werden, welche mir als Ergebnis ein JSON-Object liefern. Das JSON-Object soll dann im besten Fall im Repository liegen/abgerufen werden und an den Controller zur Verarbeitung weitergeleitet werden.
    Hier möchte ich jedoch diverse Repositorys/Controller erstellten, da ich eine logische Trennung der Entitäten für sinnvoll halte (sprich ein EventControler / EventRepository, ein PersonController / PersonRepository ...) Mir hat sich nun die Frage gestellt, ob ein Model dann notwendig wäre bzw. überhaupt ein Repository.

    Im Moment ist es so gelöst, dass unter Classes/Service eine Class für den HttpRequest liegt, welche vom Repository genutzt wird, um die API-Schnittstelle mit diversen Parametern aufzurufen und die notwendigen Daten für die Entität zu holen. Die Daten aus dem Repository holt sich dann der Controller und verarbeitet diese.
    Gibt es hierfür eventuell eine bessere Lösung oder wäre das im Sinne von "Best Practice" ?
    Das Caching werde ich definitiv einbauen und ist ein wirklich guter Hinweis. Vielen Dank soweit Teisinger für deine Geldud und Zeit!

  • Teisinger Teisinger
    Jedi-Meister
    0 x
    445 Beiträge
    31 Hilfreiche Beiträge
    13. 12. 2019, 16:58

    Ist mir nicht bekannt, das es dafür einen "echten" Best Practice gibt - das was du da machst, hört sich doch ganz gut an... ( und nein ein Model sollte nicht notwendig sein dafür ).

    Hinweis: deine Methoden der Service Class würde ich wohl statisch machen - das sollte etwas performanter sein.

    https://github.com/groundstack-org

  • shivpatil shivpatil
    Jar Jar Binks
    0 x
    1 Beiträge
    0 Hilfreiche Beiträge
    18. 12. 2019, 19:56

    https://www.boostmedia.in/digital-marketing-courses-institute-in-aurangabad-maharashtra-india.php

  • 1