Concepto del Rest

Imaginemos que tenemos una aplicación móvil que vende zapatos. Los datos están en una base de datos en conexión con una aplicación WEB, por ejemplo Magento. Entonces la aplicación móvil, en vez de hacer peticiones, directamente a la base de datos, hace peticiones a la aplicación WEB Magento. Y luego Magento hace queries a la bbdd. Esta manera de hacer las cosas sigue el principio de la centralización de gestión de datos.

El rest, básicamente, es un set de formas para hacer las operaciones de crear, leer, eliminar y actualizar datos de la base de datos. Las peticiones que se lanzan, 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
          

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

Crear Integración con Magento

Añadir nueva integración en el Backoffice Go to the 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>

  

La interface del service 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