batch
Para ejecutar varios métodos en una solicitud, utilice el método core/batch.
Endpoint
La solicitud se puede enviar de dos formas. En la primera forma, el parámetro params contiene una matriz de métodos:
svc=core/batch¶ms=[
{
"svc": "<text>",
"params": {}
}
]
En la segunda forma, el parámetro params contiene un objeto, lo que además permite utilizar el parámetro flags:
svc=core/batch¶ms={
"params": [{
"svc": "<text>",
"params": {}
}],
"flags": <uint>
}
Parámetros
Los parámetros svc y params se especifican para cada método de la matriz. El parámetro flags se especifica para la solicitud en su conjunto.
| Nombre | Descripción |
|---|---|
| svc | Nombre del método que se debe ejecutar, por ejemplo, core/search_items. |
| params | Parámetros del método. |
| flags | Máscara de bits que puede incluir los siguientes flags:
0 para ejecutar todos los métodos sin estos límites. El parámetro solo está disponible en la segunda forma de la solicitud. Si lo omite en esta forma, la solicitud devuelve el error 4. |
Resultado devuelto
Si la solicitud se completa correctamente, el resultado se devuelve con el siguiente formato:
[
{ /* Objeto con datos si no hay errores. */
...
},
{ /* Código de error si se ha producido un error. */
"error": <int>
},
...
]
Cada elemento de la matriz es el resultado del método correspondiente, sin ningún contenedor adicional. Si un método devuelve un error, su elemento contiene el código de error de ese método.
Si el parámetro
flagsincluye el flag0x01 (1)y uno de los métodos devuelve un error, todos los métodos que siguen a este devuelven el código de error 10.
Límites
Si el parámetro flags incluye el flag 0x02 (2), a la solicitud se aplican los siguientes límites. Los valores de la tabla son los predeterminados; el servidor puede utilizar otros valores.
| Límite | Valor predeterminado | Resultado si se supera el límite |
|---|---|---|
| Cantidad de métodos en la solicitud | 100 | Los métodos no se ejecutan y la solicitud devuelve el error 4. |
| Tamaño del resultado de un método | 1 MB | El elemento de este método contiene {"error":6,"reason":"BATCH_SINGLE_RESPONSE_TOO_LARGE"}. |
| Tamaño de toda la respuesta | 10 MB | El elemento del método cuyo resultado supera el límite contiene {"error":6,"reason":"BATCH_RESPONSE_TOO_LARGE"}. |
Si se supera uno de los límites de tamaño, los métodos siguientes no se ejecutan ni se incluyen en la respuesta, por lo que la matriz puede contener menos elementos que la solicitud. Si el elemento con el error tampoco cabe en la respuesta, la matriz termina en el último elemento que cabe.
Códigos de error
La solicitud en sí puede devolver los siguientes códigos de error:
| Código | Descripción |
|---|---|
| 4 | Parámetros de entrada incorrectos. Esto sucede en uno de los siguientes casos:
|
| 6 | El resultado devuelto es demasiado grande. Esto sucede en uno de los siguientes casos:
|
Un método concreto puede devolver su propio código de error en su elemento de la matriz. Además de los códigos del propio método, son posibles los siguientes códigos:
| Código | Descripción |
|---|---|
| 2 | Nombre de método incorrecto en el parámetro svc. |
| 6 | El resultado es demasiado grande. Este código solo es posible si el parámetro flags incluye el flag 0x02 (2). Para obtener más información, consulte Límites. |
| 10 | El método no se ejecuta. Esto sucede en uno de los siguientes casos:
|
Ejemplos
Todos los ejemplos que se muestran a continuación envían los mismos dos métodos: el primero se refiere al elemento con el ID 1004, al que el usuario no tiene derechos de acceso, y el segundo obtiene las propiedades del recurso con el ID 1003. Agregue a cada solicitud el parámetro sid con el identificador de su sesión.
Ejecución de todos los métodos a pesar de un error
En la primera forma, el parámetro params contiene solo la matriz de métodos, por lo que no hay dónde especificar el parámetro flags. Se ejecutan todos los métodos.
svc=core/batch¶ms=[
{
"svc": "core/search_item",
"params": {
"id": 1004,
"flags": 1
}
},
{
"svc": "core/search_item",
"params": {
"id": 1003,
"flags": 1
}
}
]
La segunda forma da el mismo resultado si el valor del parámetro flags es 0.
svc=core/batch¶ms={
"params": [
{
"svc": "core/search_item",
"params": {
"id": 1004,
"flags": 1
}
},
{
"svc": "core/search_item",
"params": {
"id": 1003,
"flags": 1
}
}
],
"flags": 0
}
Respuesta:
[
{
"error": 7
},
{
"item": {
"nm": "Resource",
"cls": 3,
"id": 1003,
"mu": 0,
"uacl": 19826928009763
},
"flags": 1
}
]
El error del primer método no afecta al segundo.
Detención de la solicitud después del primer error
Para detener la ejecución después del primer error, utilice la segunda forma de la solicitud y especifique el flag 0x01 (1). Los métodos son los mismos, pero ahora el segundo no se ejecuta y devuelve el error 10.
svc=core/batch¶ms={
"params": [
{
"svc": "core/search_item",
"params": {
"id": 1004,
"flags": 1
}
},
{
"svc": "core/search_item",
"params": {
"id": 1003,
"flags": 1
}
}
],
"flags": 1
}
Respuesta:
[
{
"error": 7
},
{
"error": 10
}
]