Contao-Camp 2024
Ergebnis 1 bis 39 von 39

Thema: Swagger API

  1. #1
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard Swagger API

    Hi,

    ich müßte eine API bauen und such gerade nach Lesestoff um Contao 4 mit Swagger zu verheiraten und finde irgendwie nur komplett allgemeines oder detailliertes, wo ich bereits am Anfang aussteige.

    Eventuell hab ich mich auch übernommen und muß das eh als Kleinauftrag(?) ins Forum stellen.

    Eigentlich müßte ich nur ein paar Formulardaten übernehmen und zu Drittanbieter mit Swagger schleusen.

    Dachte ich mach das mit prepareFormData Hook, aber habe nun festgestellt, dass ich zuwenig Kenntnis von der Materie (api swagger) habe.

    Weiß irgendwer ein Beispiel, wo ich mir den prinzipiellen Ablauf abgucken kann, oder doch besser Kleinauftrag ?

    Ich denk, soviel Aufwand ist das eigentlich nicht, oder ?

    Danke für Hinweise, Tipps

    Grüße, Tintifax

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.687
    User beschenken
    Wunschliste

    Standard

    wenn der Drittanbieter seine API fertig hat, sollte er Dir sagen können, wie er die Daten für einen "push" erwartet inkl. Authentifizierung usw.

    in prepareFormData könntest Du z.B. mit cURL die Daten rüber schaufeln

  3. #3
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    soweit ich das bisher verstanden habe, kann ich die Formulardaten als json file übergeben
    Authentifizierung erfolgt mit bearer token

    Aber wie gesagt, das ist Neuland für mich, deshalb würd ich mir ja gern irgendwo ein Beispiel ansehen, finde aber nur Bruchstücke oder unpassendes

    Habe aber eben festgestellt, dass mit Curl die Daten rübergeschaufelt werden sollen. Ebenfalls First Contact mit Curl.

    Heißt das, ich muss eh nur die strings mit den Variablen aus dem prepareFormData Hook in folgenden Code eintragen:

    PHP-Code:
    curl -X POST --header 'Content-Type: application/json' --header 'Accept: application/json' -'{ \ 
       "firstName": "string", \ 
       "lastName": "string", \ .. 

  4. #4
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Im Prinzip ja, aber anstatt direkt mit curl herumzuwurschteln würde ich dafür bspw. symfony/http-client nutzen.
    PHP-Code:
    $client->request('POST''https://…', [
        
    'json' => ['param1' => 'value1''…'],
    ]); 
    » sponsor me via GitHub or PayPal or Revolut

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.687
    User beschenken
    Wunschliste

    Standard

    Du würdest das dann in dem Hook damit machen https://www.php.net/manual/de/book.curl.php können

  6. #6
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    hm ich glaub ich nehm das Türchen mit symfonie/http-client

    das mit dem Bearer Token hab ich auch noch nicht verstanden, aber eventuell lichtet sich das, sobald ich den Api Key zum Testen hab.

    Vielen Dank soweit

    Ich meld mich dann vermutlich morgen wieder, wenn neue Fragezeichen da sind...

  7. #7
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107
    » sponsor me via GitHub or PayPal or Revolut

  8. #8

  9. #9
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    ich mag das Keksmonster, sollte nur am Ende lächeln

  10. #10
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.687
    User beschenken
    Wunschliste

    Standard

    das lächelt doch! musst nur lange genug hin gucken

  11. #11
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    hm ich sehs nicht, in meinen Keksen fehlt wohl der Spaß ; )

  12. #12
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    ah im Video hats gelächelt am Schluß, hat aber auch 200 Kekse bekommen

  13. #13
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    Ich hab hier definitiv Wissensbedarf in OOP.

    Ich kann zwar über Postman den Bearertoken erzeugen, aber wie ich das im Hook in Contao bewerkstelligen soll, verstehe ich nicht.

    Ich hab einen Endpunkt zum Erhalt des Bearer Tokens, der 1h lang gültig ist und den ich mit dem Post Request abfragen muß.
    Die echten Daten sind korrekt und funktionieren im Swagger Testtool.

    Folgender Request erzeugt nur Error: Call to a member function request() on null

    PHP-Code:
            $response $client->request('POST''https://XXX', [
                
    'Headers' => [
                
    'Accept' => 'application/json',
                
    'Content-Type' => 'application/x-w w w -form-urlencoded'
                
    ],
                
    'Body' => [
                
    'grant_type' => 'XXX',
                
    'client_id' => 'XXX',
                
    'client_secret' => 'XXX',
                
    'scope' => 'XXX',
                ],
            ]); 
    Ich geh mal davon aus, dass "use Symfony\Component\HttpClient\HttpClient;" falsch ist.

    Wie bekomme ich den http-client in Contao zum Laufen ?

    Der Hook selbst funktioniert.

    Bitte um Hilfe

    Danke

  14. #14
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Du musst dir den Client noch erzeugen. Siehe https://symfony.com/doc/current/http...ml#basic-usage » Standalone Use, wenn du nicht Dependency Injection verwendest.
    » sponsor me via GitHub or PayPal or Revolut

  15. #15
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    Ah vielen Dank, so komme ich weiter

    headers und body mußte nur klein geschrieben werden
    und 'Content-Type' => 'application/x-w w w -form-urlencoded' mußte weg

    d.h. bei der Doku muß ich immer die Standalone Variante nehmen ?

  16. #16
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Zitat Zitat von tintifax Beitrag anzeigen
    d.h. bei der Doku muß ich immer die Standalone Variante nehmen ?
    Nein, du kannst auch Dependency Injection benutzen ("Framework Use"):

    In the Symfony framework, this class is available as the http_client service. This service will be autowired automatically when type-hinting for Symfony\Contracts\HttpClient\HttpClientInterface
    » sponsor me via GitHub or PayPal or Revolut

  17. #17
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    hm ok ich muss da dringend in weiterbildung investieren

    @ Spooky, hast Du keine Wunschliste mehr ?

  18. #18
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Zitat Zitat von tintifax Beitrag anzeigen
    @ Spooky, hast Du keine Wunschliste mehr ?
    Nein, dafür aber Sponsoring Möglichkeit auf GitHub (siehe Signatur).
    » sponsor me via GitHub or PayPal or Revolut

  19. #19
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Nein, dafür aber Sponsoring Möglichkeit auf GitHub (siehe Signatur).
    einmaliges Sponsoring gibts da nicht und einen github account braucht man auch, aber schauma mal

  20. #20
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.687
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von tintifax Beitrag anzeigen
    einmaliges Sponsoring gibts da nicht und einen github account braucht man auch, aber schauma mal
    lass Dir eine Rechnung zusenden, wenn "Sponsoring" > 50€ netto ist

  21. #21
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    Hab hier noch eine Frage:

    Also die Formulardaten und den Bearertoken kann ich nun beziehen und auch korrekt ausgeben.

    Den Bearertoken übergebe ich dann einfach mit einem zusätzlichen Post Request in einem 2. HttpClient ?


    PHP-Code:
    $client2 HttpClient::createForBaseUri('https://XXX', [
        
    'auth_bearer' => 'the-bearer-token',
    ]);
    $client2->request('POST''https://XXX', [
        
    'json' => ['param1' => 'value1''…'],
    ]); 

  22. #22
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    "Sponsoring" > 50€ netto ist
    definitiv

  23. #23
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Zitat Zitat von tintifax Beitrag anzeigen
    einmaliges Sponsoring gibts da nicht und einen github account braucht man auch, aber schauma mal
    Gleich daneben gibt's auch einen PayPal Link für einmalige Spenden.


    Zitat Zitat von tintifax Beitrag anzeigen
    Hab hier noch eine Frage:

    Also die Formulardaten und den Bearertoken kann ich nun beziehen und auch korrekt ausgeben.

    Den Bearertoken übergebe ich dann einfach mit einem zusätzlichen Post Request in einem 2. HttpClient ?


    PHP-Code:
    $client2 HttpClient::createForBaseUri('https://XXX', [
        
    'auth_bearer' => 'the-bearer-token',
    ]);
    $client2->request('POST''https://XXX', [
        
    'json' => ['param1' => 'value1''…'],
    ]); 
    Kann auch der selbe Client sein, die auth_bearer Option musst du nicht unbedingt beim erzeugen des Clients setzen, sondern kannst sie bei jedem Request mitgeben.
    » sponsor me via GitHub or PayPal or Revolut

  24. #24
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    hm irgendwie funzt das noch nicht

    ich müßte doch einen zweiten Client brauchen

    Den Token hole ich mir von https: XXX

    Und die Daten muß ich auf https: YYY schicken

    Das muß ich doch in 2 requests machen, oder nicht ?

    Scheinbar übergebe ich den Token falsch, bekomme 403 Error

    So funktioniert das wohl nicht:

    PHP-Code:
    $clientBearer HttpClient::create();

            
    $response $clientBearer->request('POST''https://XXX', [
                
    'headers' => [
                
    'Accept' => 'application/json',
                ],
                
    'body' => [
                
    'client_secret' => 'zzzz',
                ],
            ]); 

    $contentBearer $response->toArray();    
    $bearertoken $contentBearer['access_token'];

        
    $client HttpClient::create();            
            
    $client->request('POST''https://YYY', [
                
    'auth_bearer' => 'Bearer' $bearertoken,
                
    'json' => [    
                
    'email'=> $email,
                ],
                ]); 

    Dann fiel mir aber auf, dass ich den Token mit einem Leerzeichen übergeben muß:
    Also 'auth_bearer' => 'Bearer ' . $bearertoken,

    Damit bekomm ich aber diesen Error: "Invalid character found in option "auth_bearer":

    Was ist falsch bzw was ist bereits richtig ?

  25. #25
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Zwei Clients brauchst du wie gesagt nicht unbedingt.


    Zitat Zitat von tintifax Beitrag anzeigen
    Dann fiel mir aber auf, dass ich den Token mit einem Leerzeichen übergeben muß:
    Also 'auth_bearer' => 'Bearer ' . $bearertoken,

    Damit bekomm ich aber diesen Error: "Invalid character found in option "auth_bearer":

    Was ist falsch bzw was ist bereits richtig ?
    Den Bearer Header setzt du gar nicht selbst. Du schreibst einfach nur
    PHP-Code:
    [
        
    'auth_bearer' => $token,

    Siehe https://symfony.com/doc/current/http...authentication
    Geändert von Spooky (16.08.2021 um 10:22 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  26. #26
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    hm komm nicht weiter

    hab aber das beim googeln gefunden: https://github.com/symfony/symfony/pull/38647

    kann das damit etwas zu tun haben ?
    scheinbar ja, wie ich glaube, aber das ist nur Raten auf niedrigem Niveau

    zumindest hat es etwas mit Traits zu tun. In der Erromeldung betrifft es die ResponseTrait.php:

    PHP-Code:
    ../vendor/symfony/http-client/Response/ResponseTrait.php:291 

  27. #27
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Wo kommst du nicht weiter, bzw. was genau ist das Problem?
    » sponsor me via GitHub or PayPal or Revolut

  28. #28
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    ich weiß nicht wie ich den Token übergeben soll

    der muss in der Form "Bearer 1234" übergeben werden

    beim ersten Request bekomm ich den Token aber nur als "1234"

  29. #29
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    Zitat Zitat von tintifax Beitrag anzeigen
    der muss in der Form "Bearer 1234" übergeben werden
    Nein, siehe mein voriger Post. Du übergibst nur den Token, den Bearer Header setzt der Symfony HTTP Client selbst.
    » sponsor me via GitHub or PayPal or Revolut

  30. #30
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    omg jetzt hats funktioniert

    ich hab die Variablen der zu übergebenen Daten zwischendurch auskommentiert und deshalb einen 500er bekommen

    so gehts nun:

    PHP-Code:

    $clientBearer 
    HttpClient::create();

            
    $response $clientBearer->request('POST''https://XXX', [
                
    'headers' => [
                
    'Accept' => 'application/json',
                ],
                
    'body' => [
                
    'client_secret' => 'zzzz',
                ],
            ]); 

    $contentBearer $response->toArray();    
    $bearertoken $contentBearer['access_token'];

    $client2 HttpClient::createForBaseUri('https://YYY', [
            
    'auth_bearer' => $bearertoken,
            ]);
        
    $response2 $client2->request('POST''https://YYY', [
            
    'json' => [    
            
    'email'=> $email,
            ],
            ]); 
    jetzt noch Feinschliff was noch alles übergeben werden muß und dann bin ich fertig.
    Danach werd ich dann mal mein PayPal bemühen.

  31. #31
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    Interesse halber, weil Du - Spooky - meintest, ich kanns in 1 Request machen:

    In 1 Request bekomm ich das doch nicht hin, oder doch irgendwie ?

    Ich hab ja 2 URLS

    Wegen Dublettenprüfung muß ich hier eh auch noch einen dritten Request einschieben.

  32. #32
    Community-Moderator
    Wandelndes Contao-Lexikon
    Avatar von Spooky
    Registriert seit
    12.04.2012.
    Ort
    Scotland
    Beiträge
    33.901
    Partner-ID
    10107

    Standard

    PHP-Code:
    $client HttpClient::create();

    $token $client ->request('POST''https://XXX', [
            
    'headers' => [
                
    'Accept' => 'application/json',
            ],
            
    'body' => [
                
    'client_secret' => $secret,
            ],
        ])
        ->
    toArray()['access_token']
    ;

    $response $client->request('POST''https://YYY', [
            
    'auth_bearer' => $token,
            
    'json' => [    
                
    'email'=> $email,
            ],
        ])

    Geändert von Spooky (16.08.2021 um 11:47 Uhr)
    » sponsor me via GitHub or PayPal or Revolut

  33. #33
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    ja definitiv eleganter

  34. #34
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.687
    User beschenken
    Wunschliste

    Standard

    PHP-Code:
    $client HttpClient::create();

    $token $client->request('POST''https://XXX', [
            
    'headers' => [
                
    'Accept' => 'application/json',
            ],
            
    'body' => [
                
    'client_secret' => $secret,
            ],
        ])
        ->
    toArray()['access_token']
    ;

    $response $client->request('POST''https://YYY', [
            
    'auth_bearer' => $token,
            
    'json' => [    
                
    'email'=> $email,
            ],
        ])

    so - oder?

  35. #35
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    ja das hab ich auch grad entdeckt
    Fehlerteufelchen schläft auch bei Spooky nicht
    Hat Spooky selber schon ausgebessert

  36. #36
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    Zitat Zitat von Spooky Beitrag anzeigen
    Gleich daneben gibt's auch einen PayPal Link für einmalige Spenden.
    Bist Dir sicher ? Wo ist der ? Den seh ich nicht, hab sogar eingeloggt, gibts ja nicht...

  37. #37

  38. #38
    Contao-Fan
    Registriert seit
    09.02.2011.
    Beiträge
    600

    Standard

    ach hier im forum hab in github gesucht
    aber seltsamerweise seh ich diese Zeile hier nicht

  39. #39
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.687
    User beschenken
    Wunschliste

    Standard

    dann für Dich "auf die harte Tour": https://paypal.me/fritzmg

    ;-)

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •