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
- Stackoverflow: Diferencia entre rest y http
- Mozilla Firefox: Tipos de http
- Mozilla Firefox: Peticiones Preflight
- Magento: Crear integración
- Herramienta de ayuda: Postman