Skip to content

API REST ERP

Oriol Piera edited this page Jan 5, 2023 · 3 revisions

Que se puede hacer?

  • GET (lectura de un recurso o múltiples)
  • POST (Creación de recursos, ejecución de métodos)
  • PATCH (Modificación de recursos)
  • UNLINK (Eliminación de recursos)

API

  • /token
  • /<string:model>
  • /<string:model>/<int:obj_id>
  • /<string:model>/<string:method>
  • /<string:model>/<int:obj_id>/<string:method>

Donde model será siempre en CamelCase, por ejemplo el modelo res.partner, en la API el recurso serà ResPartner. Para más información, ver lista de modelos del ERP

Autenificación (/token)

Se obtiene un token a través de autentificación Basic (RFC 7617)

GET http://localhost:8067/token
Authorization: Basic admin admin

A partir de este momento todas las peticiones las podemos hacer con el token de la forma

Obtención de múltiples recursos (/string:model)

GET  http://localhost:8067/ResPartner?filter=[('customer', '=', True)]&schema=name,vat,address.email
Authorization: token XXXXXXXXXX

Parámetros

  • filter: Puede ser un filtro de búsqueda que sea válido con el método search de la API
  • Operadores: =, !=, >, >=, <, <=, like, ilike, =like, =ilike. Los operadores like y ilike añaden % automáticamente al inicio y final del texto, si utilizamos el =like o =ilike no va añadir el caráctr % y lo tendremos que añadir nosotros dónde queramos)
  • schema: Son los campos que queremos leer, en forma *dot notation` para obtener modelos relacionados, sino pasamos schema cogerá todos los campos del modelo.
  • limit: El límite de resultados a obtener, por defecto es 80 (para la paginación)
  • offset: Des de que registro queremos empezar, por defecto es 0. (para la paginación)

Resultado

Esto nos devuelve el siguiente JSON

{
  "items": [
    {
      "address": [
        {
          "email": null,
          "id": 18
        }
      ],
      "credit_limit": 15000.0,
      "id": 20,
      "name": "Centrale d'achats BML",
      "vat": null
    },
    {
      "address": [
        {
          "email": null,
          "id": 7
        }
      ],
      "credit_limit": 32000.0,
      "id": 14,
      "name": "Maxtor",
      "vat": null
    },
    {
      "address": [
        {
          "email": "info@openroad.be",
          "id": 2
        }
      ],
      "credit_limit": 12000.0,
      "id": 17,
      "name": "OpenRoad",
      "vat": null
    },
    {
      "address": [],
      "credit_limit": 5000.0,
      "id": 15,
      "name": "Seagate",
      "vat": null
    }
  ],
  "limit": 80,
  "n_items": 4,
  "offset": 0
}

Donde:

  • items: és la liste de recursos segun el schema que le hayamos pasado
  • n_items: és el número de ítems que cumplen la selección
  • limit: el límite del listado
  • offset: des de que ítem se está mostrando

Creación de un recurso (/string:model)

POST http://localhost:8067/ResPartner Authorization: token {{auth_token}} Content-Type: application/json

{
  "name": "Un partner"
}

Resultado

{
  "id": 24,
  "status": "OK"
}

Obtención de un recurso (/string:model/int:obj_id)

Igual que el de múltiples recursos pero en la URL hay el id del recurso y también le podemos pasar el schema

GET http://localhost:8067/ResPartner/1?schema=name,vat
Authorization: token XXXXXXXXXX

Respuesta

Nos devuelve el JSON del recurso directamente

{
  "id": 1,
  "name": "Tiny sprl",
  "vat": "ESA31896889"
}

Modificación de un recurso (/string:model/int:obj_id)

PATCH http://localhost:8067/ResPartner/10
Authorization: token {{auth_token}}
Content-Type: application/json

{
  "credit_limit": 200
}

Podemos hacer modificaciones también de modelos relacionados des del propio recurso, por ejemplo añadir una dirección a un partner

PATCH http://localhost:8067/ResPartner/15
Authorization: token {{auth_token}}
Content-Type: application/json

{
  "address": [
    {
      "name": "Test",
      "email": "test@example.com"
    }
  ]
}

O modificar una dirección de un partner que ya exista

PATCH http://localhost:8067/ResPartner/15
Authorization: token {{auth_token}}
Content-Type: application/json

{
  "address": [
    {
      "id": 24,
      "name": "Test updated",
      "email": "test@example.com"
    }
  ]
}

Llamar un método de un objecto (/string:model/string:method)

POST http://localhost:8067/ResPartner/fields_get
Authorization: token {{auth_token}}

Si queremos pasar parámetros a la función, los podemos pasar utilizando el contenido del POST con un json y la propiedad args:

POST http://localhost:8067/ResPartner/fields_get
Authorization: token {{auth_token}}
Content-Type: application/json

{
  "args": [["name", "active", "vat"]]
}

Respuesta

I nos devuelve la respuesta en un json dentro de la propiedad res:

{
  "res": {
    "active": {
      "string": "Active",
      "type": "boolean"
    },
    "name": {
      "required": true,
      "select": true,
      "size": 128,
      "string": "Name",
      "type": "char"
    },
    "vat": {
      "help": "Value Added Tax number. Check the box if the partner is subjected to the VAT. Used by the VAT legal statement.",
      "select": true,
      "size": 32,
      "string": "VAT",
      "type": "char"
    }
  }
}

Llamar un método de un objecto (/string:model/int:obj_id/string:method)

És el mismo que el de llamar a una función, pero lo estamos haciendo directamente a un recurso (obj_id)

POST http://localhost:8067/ResPartner/1/gen_next_ref
Authorization: token {{auth_token}}

Respuesta

{
  "res": true
}

Eliminación de un recurso (string:model/int:obj_id)

Para eliminar un recurso podemos utilizar el método DELETE de HTTP de la siguiente forma

DELETE http://localhost:8067/ResPartner/25
Authorization: token {{auth_token}}

Respuesta

{
  "status": "OK"
}