Concepto del Rest

Imaginemos que tenemos una aplicación móvil para vender zapatos. Los datos de los artículos y los de compra-venta están almacenados en un servidor, en una base de datos por ejemplo MYSQL. La aplicación, en vez de hacer peticiones directamente a la base de datos, hace peticiones a la aplicación WEB de Magento, que se encarga de hacer las acciones de Leer, Crear, Eliminar y Actualizar datos. Este método de gestión sigue el principio de la centralización de gestión de datos.

El REST, básicamente, es un juego de métodos para hacer las operaciones de crear, leer, eliminar y actualizar datos. Las peticiones, normalmente, son las siguientes:

Verb Explicación Sintaxis
GET Leer GET /index.html
POST Crear
                POST /user HTTP/1.1
                Host: foo.example
                Content-Type: application/x-www-form-urlencoded
                Content-Length: 27

                field1=value1&field2=value2
            
Put Actualizar
                PUT /user/1 HTTP/1.1
                Host: example.com
                Content-type: text/html
                Content-length: 16
            
Delete Eliminar
                DELETE /file.html HTTP/1.1
                Host: example.com
              
Head Como el Get pero sin el cuerpo de la respuesta. Por ej, cuando queremos saber el tamaño de un fichero antes de descargarlo HEAD /index.html
Options Comprueba si la aplicación web admite el tipo de http verb de la petición que se va a lanzar. Esta petición se lanza automáticamente en los buscadores cuando se quiere lanzar una petición a un dominio distinto del actual con Ajax. Aparecen estas peticiones en Magento, normalmente cuando activas el CDN.
            // el servidor devuelve respuesta como esta
            access-control-allow-headers: X-Requested-With
            access-control-allow-origin: *
            allow: GET,POST,OPTIONS,HEAD,TRACE
          

Crear Integración con Magento

Los pasos para crear una integración con Magento son los siguientes:

Añadir nueva integración en el Backoffice System > Extensions > Integrations. Anota el access token, que luego se usará para las peticiones.

Lanzar petición a Magento

No olvides incluir el access token en la cabecera, Authorization: Bearer 320rcyscgdwvfw9n3dikhxgaw29z6guv

Ejemplo: crear customer

    
  #Crear usuario

  curl --location --request POST 'localhost/rest/default/V1/customers' \
      --header 'Content-Type: application/json' \
      --header 'Authorization: Bearer 320rcyscgdwvfw9n3dikhxgaw29z6guv' \
      --header 'Cookie: PHPSESSID=f6re4dvn8m63oi3kljpqgmn2sn' \
      --data-raw '{
        "customer": {
          "email": "jdoe@example.com",
          "firstname": "Jane",
          "lastname": "Doe",
          "addresses": [
            {
              "defaultShipping": true,
              "defaultBilling": true,
              "firstname": "Jane",
              "lastname": "Doe",
              "region": {
                "regionCode": "NY",
                "region": "New York",
                "regionId": 43
              },
              "postcode": "10755",
              "street": [
                "123 Oak Ave"
              ],
              "city": "Purchase",
              "telephone": "512-555-1111",
              "countryId": "US"
            }
          ]
        },
        "password": "Password1"
      }'
    

El fichero webapi.xml define la ruta, http verb, la clase, y el método que se ejecuta. La ruta siempre sigue este formato {dominio}/rest/{site}/V1/customers

  
    <route url="/V1/customers" method="POST">
      <service class="Magento\Customer\Api\AccountManagementInterface" method="createAccount"/>
      <resources>
          <resource ref="anonymous"/>
      </resources>
    </route>
  

El interface del servicio Magento\Customer\Api\CustomerRepositoryInterface está mapeado en etc/webapi_rest/di.xml. La clase Magento\Customer\Model\AccountManagementApi hereda de Magento\Customer\Model\AccountManagement, que es usada en la web con mapeo en etc/di.xml. Por ejemplo en el controller customer/account/createpost/

  
    <preference for="Magento\Customer\Api\AccountManagementInterface"type="Magento\Customer\Model\AccountManagementApi" />
  

Referencias