Wie kann man die vorhandenen Produkt Lieferstatus per REST API abfragen?

Thema wurde von MJ, 13. Oktober 2023 erstellt.

  1. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    Geht das mit der v2 oder v3 API?

    Mit shop.de/api.php/v2/manufacturers erhalte ich die Hersteller.


    Wie bekomme ich die für Produkte vorhandenen Lieferstatus?

    shop.de/api.php/v2/delivery-status o. ä. hab ich nicht gefunden, in der Doku auch nicht. Oder habe ich etwas übersehen?

    Hinweise und Tipps sind wie immer herzlich Willkommen!

    Liebe Grüße und euch ein schönes Wochenende
    Jens
     
  2. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. Oktober 2018
    Beiträge:
    140
    Danke erhalten:
    78
    Danke vergeben:
    18
    #2 Anonymous, 13. Oktober 2023
    Zuletzt bearbeitet: 17. Oktober 2023
  3. markus_wick

    markus_wick Erfahrener Benutzer

    Registriert seit:
    10. Oktober 2018
    Beiträge:
    978
    Danke erhalten:
    218
    Danke vergeben:
    153
    Hab jetzt grade ein wenig rumgesucht...
    Ich nehme an, Du meinst den Lieferstatus des Produkts, also ob z.B. "Nicht lieferbar" oder "1-2 Tage" (je nachdem welche Du Definiert hast) im Produkt an gezeigt werden? Soweit ich das gesehen habe ist das nicht setzbar oder abfragbar über die API, letztlich ergibt es sich aber ja aus dem Lagerbestand (den Du ja abfragen kannst) und Deiner Einstellung im Shop, wie der Lagebstand sich auf den Lieferstatus auswirken soll. Könntest Du also davon ableiten.
     
  4. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    #4 MJ, 16. Oktober 2023
    Zuletzt bearbeitet: 16. Oktober 2023
    Guten Morgen,

    Vielen Dank für eure Antworten. Ja, @Pepe, genau das wollte ich. Ihr meint ja beide im Grunde dasselbe. Aber ich bräuchte alle vorhandenen Paare - so, dass ich in einer externen Anwendung im Product edit - nicht nur den aktuellen Wert des Artikels habe, sondern auch ein Select-Feld, mit allen Möglichkeiten (shipping_status), um ihn auch ändern zu können.

    Dann führt der Weg wohl doch über einen direkten DB-Zugriff. Ich dachte, ich hätte den Weg mit der API wohlmöglich übersehen.

    Ich habe in älteren Threads gesehen, dass ihr beide, @Pepe und @markus_wick, euch schon länger mit der API beschäftigt. Sehe ich das richtig, dass in jedem Fall eine parallele DB-Anbindung sinnvoll ist, da Vieles eben noch nicht per API zu lösen ist?
     
  5. markus_wick

    markus_wick Erfahrener Benutzer

    Registriert seit:
    10. Oktober 2018
    Beiträge:
    978
    Danke erhalten:
    218
    Danke vergeben:
    153
    Ich bin da recht einfach gestrickt: Was die API nicht kann, mach ich nicht.... Ich nutze nur, was der Shop grundsätzlich bietet, auch keine zusätzlichen Module oder so. Reicht bei mir aus. Direkte Eingriffe in die DB hab ich mal probiert, gibt aus meiner Sicht und mit meinen begrenzten technischen Fähigkeiten keinen guten Workflow.
     
  6. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    Ah okay, danke für den Einblick. Ich schreibe mir gerade noch entsprechende Klassen, um alles nicht abgedeckte zu holen und sieht bisher gut aus. Mal sehen, was draus wird.

    Ich wünsch' euch eine schöne Woche
    Jens
     
  7. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. Oktober 2018
    Beiträge:
    140
    Danke erhalten:
    78
    Danke vergeben:
    18
    #7 Anonymous, 17. Oktober 2023
    Zuletzt bearbeitet: 17. Oktober 2023
    Wenn das API das nicht hergibt, was eigentlich drin sein sollte (was bei den Daten aus shipping_status wie von Dir beschrieben der Fall ist, IMHO) sollte das ein Feature Request sein, denn die API-fizierung ist ja ein schon lange erklärtes Ziel für gambio.

    Ich mache grundsätzlich auch keine Veränderungen direkt in der DB. In Deinem Fall würde ich auch das API entsprechend erweitern, so dass die Daten zumindest abrufbar (GET) sind.

    Viel Erfolg und ebenfalls eine schöne Woche!
     
  8. MJ

    MJ Erfahrener Benutzer

    Registriert seit:
    28. April 2011
    Beiträge:
    544
    Danke erhalten:
    56
    Danke vergeben:
    101
    Hallo @Pepe

    Es ging mir nur ums abholen (GET). Das heißt, ich brauche wirklich nur die shipping_status auslesen. Wie das mit dem API geht, habe ich nicht herausgefunden.

    Ich hole mir das per DB-Abfrage - über API wäre angenehmer.


    PS: witzig - für mich war es immer die API, aber das Interface - du hast recht, danke ;)
     
  9. Anonymous

    Anonymous Erfahrener Benutzer

    Registriert seit:
    17. Oktober 2018
    Beiträge:
    140
    Danke erhalten:
    78
    Danke vergeben:
    18
    #9 Anonymous, 18. Oktober 2023
    Zuletzt bearbeitet: 18. Oktober 2023
    Hallo Jens

    Du könntest ja das API um den Endpoint /shipping_status (im folgenden Beispiel Version 2, also api.php/v2/shipping_status) erweitern.

    Dafür schreibst Du dann den entsprechenden Controller ShippingStatusApiV2Controller. Ich würde den schön ordentlich in GXModules/{Developer}/{Module}/Api/v2/ legen. Das Mapping von Endpoint zu Controllername passiert übrigens in der api.php.

    Ich habe Dir nachfolgend mal nen beispielhaften Controller, der die Werte aus der DB Tabelle shipping_status mit Hilfe der Klasse ProductsShippingStatusSource holt, was aber sprachabhängig ist. Nur mal so als Inspiration ...

    PHP:
    <?php

    /*
    * ----------------------------------------------------------------------------
    * ShippingStatusApiV2Controller.inc.php 2023-10-18
    * ----------------------------------------------------------------------------
    */

    class ShippingStatusApiV2Controller extends HttpApiV2Controller
    {
     
        public function 
    get()
        {
        
            if (!isset(
    $this->uri[1])) {
                
    $this->_writeResponse($this->_getAllShippingStatus());
            } else {
                throw new 
    HttpApiV2Exception('not implemented'501);
            }
        
        }
     
        private function 
    _getAllShippingStatus()
        {
            
    $shipping_status_obj MainFactory::create_object('ProductsShippingStatusSource');
            return 
    $shipping_status_obj->get_all_shipping_status();
        }
     
     
        public function 
    post()
        {
            throw new 
    HttpApiV2Exception('For this endpoint POST has not been implemented yet.'501);
        }
     
     
        public function 
    put()
        {
            throw new 
    HttpApiV2Exception('For this endpoint PUT has not been implemented yet.'501);
        }
     
     
        public function 
    delete()
        {
            throw new 
    HttpApiV2Exception('For this endpoint DELETE has not been implemented yet.'501);
        }
     
    }