Türchen 16: Eigene Magento 2 Webapi

Die Magento 2 Webapi bietet eine super Schnittstelle, um wichtige Informationen abzufragen oder zu speichern. In diesem Türchen für dich eine kurze und simple Anleitung, wie du deine eigenen Daten über eine eigene Route verfügbar machen kannst.

Als ersten Schritt definieren wir die Route samt Service und Resource in einer „etc/webapi.xml“, die in einem Modul deiner Wahl liegt.

<?xml version="1.0"?>
<routes>
  <!-- die Methode und Route -->
  <route method="GET" url="/V1/cx/getData">
    <!-- das aufgerufene Interface / Methode -->
    <service
      class="Codex\CustomApi\Api\DataInterface"
      method="getData"
    />

    <resources>
      <!-- anonymous = keine Authorization -->
      <resource ref="anonymous"/>

      <!-- ALTERNATIVE mit Authorization -->
      <resource ref="Codex_CustomApi::getData"/>
    </resources>
  </route>
</routes>

Als nächstes legen wir das Interface an, welches wir in der XML-Datei als Service definiert haben. In diesem Fall ist es „Codex\CustomApi\Api\DataInterface.php“.

// Das Interface in
// Codex\CustomApi\Api\DataInterface.php

<?php
namespace Codex\CustomApi\Api;

interface DataInterface
{
  /**
   * @return array
   */
   public function getData(): array;
}

Anschließend können wir ein DataModel anlegen, welches das zuvor angelegte Interface implementiert. In diesem Fall ist es „Codex\CustomApi\Model\Api\DataModel.php“.

// Ein Model, welches das zuvor angelegte
// Interface implementiert in
// Codex\CustomApi\Model\Api\DataModel.php

<?php
namespace Codex\CustomApi\Model\Api;

use \Codex\CustomApi\Api\DataInterface;

class DataModel implements DataInterface
{
  public function getData(): array
  {
    // Datenbeschaffungs Logik
    return [];
  }
}

In dem ersten Code-Beispiel mit der webapi.xml gibt es zwei Varianten, was die Authentifizierung angeht. Die erste Variante mit „anonymous“ hat keine Authentifizierung. Die andere Variante wiederum schon und benötigt eine gesetzte ACL. Dafür liegen wir eine „etc/acl.xml“ in dem selben Modul an.

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Acl/etc/acl.xsd">
  <acl>
    <resources>
      <resource id="Magento_Backend::admin">
        <resource
          id="Codex_CustomApi::getData"
          title="Codex Custom API"
          translate="title"
          sortOrder="100"
        >
      </resource>
    </resources>
  </acl>
</config>

Und damit hätten wir es schon! Jetzt hast du freie Verfügung über die Datenbeschaffung und kannst über die normale Magento-Webapi deine eigene Route verfügbar machen.

0 Kommentare

Hinterlasse einen Kommentar

An der Diskussion beteiligen?
Hinterlasse uns deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert