En el primer artículo empecé a analizar RESTForms - REST API para tus clases persistentes y hablamos sobre las características básicas. Ahora, me gustaría hablar sobre las características avanzadas, principalmente las capacidades de consultas:
* Consultas básicas
* Consultar argumentos
* Consultas personalizadas
Consultas
Las consultas pueden obtener segmentos de datos, criterios en criterios arbitrarios. Hay dos tipos de consulta en RESTForms:
* Las consultas básicas funcionan para todas las clases RESTForms una vez definidas y solo difieren en la lista de campos
* Las consultas personalizadas solo funcionan para las clases en las que están especificadas y disponibles, pero el desarrollador tiene acceso completo al texto de la consulta
Consultas básicas
Definido una vez e inmediatamente disponible para todas o algunas clases. Algunas consultas básicas están definidas por el sistema, los desarrolladores pueden agregar más, y todas estas consultas solo definen la lista de campos SELECT. Todo lo demás (filtrado, paginación, etc. se realiza mediante RESTForms)
Invocar form/objects/:class/:query, para ejecutar una consulta simple. El segundo parámetro :query determina el nombre de la consulta: el contenido de la consulta entre SELECT y FROM. Estos son los tipos de consulta predeterminados:
| Query | Descripción |
| ------------ | ------------------------- |
| all | Toda la información |
| info | displayName e id |
| infoclass | displayName, id, class |
| count | número de filas |
Por ejemplo, para obtener información básica sobre los objetos Form.Test.Person, podemos ejecutar consultas de infoclases:
form/objects/Form.Test.Person/infoclass
{"children": [
{"_id":"1", "displayName":"Alice", "_class":"Form.Test.Person"},
{"_id":"2", "displayName":"Charlie", "_class":"Form.Test.Person"},
{"_id":"3", "displayName":"William", "_class":"Form.Test.Person"}
]}
RESTForms busca una consulta denominada myq en los siguientes lugares (hasta el primer éxito):
Método de clase queryMYQ en su clase de formulario
Parameter MYQ in your queries class
Método de clase queryMYQ en su clase de consultas
Parámetro MYQ en la clase Form.REST.Objects
Método de clase queryMYQ en la clase Form.REST.Objects
Puede definir su propia clase de consultas (para las entradas 2, 3 en la lista anterior): clase especial que contiene definiciones de consulta disponibles para todas las clases. Para definir su propia consulta llamada myq allí:
1. (Una vez) Definir una clase YourClassName
2. Definir allí un parámetro MYQ o método de clase queryMYQ. El parámetro tiene prioridad sobre el método.
3. El método o el parámetro deben devolver la parte de la consulta SQL entre SELECT y FROM
4. (Una vez) Ejecuta en un terminal: Do ##class(For.Settings).setSetting("queryclass", YourClassName)
La firma del Method es:
ClassMethod queryMYQ(class As %String) As %String
También puede definir una consulta específica de clase. Para definir su propia consulta de clase denominada myq:
1. Define un método de clase queryMYQ en tu clase de formulario
La firma del método es: ClassMethod queryMYQ() As %String
2. El método debe devolver la parte de la consulta SQL entre SELECT y FROM
Argumentos URL
Puede suministrar filtros y otros parámetros en URL. Todos los argumentos son opcionales..
| Argumento | Valor de Ejemplo | Descripción |
| ------------ | ------------------- | ------------------------------------------------------ |
| size | 2 | tamño de la página |
| page | 1 | número de página |
| filter | Value+contains+W | WHERE cláusula |
| orderby | Value+desc | ORDER BY cláusula |
| collation | UPPER | COLLATION cláusula |
| nocount | 1 | Eliminar el recuento de filas (acelera la consulta) |
Aquí hay información sobre estos argumentos.
### ORDER BY cláusula
Cambia el orden de los resultados. El valor puede ser: Column o Column+desc. Column es una column de la tabla sql o un número de columna.
###
WHERE cláusula
Condición de filtro en un formato: Column+condition+Value.
Son posibles varias condiciones: Column+condition+Value+Column2+condition2+Value2.
La sintaxis de flecha y los objetos en serie también son compatibles: Column_ColumnField+condition+Value
Si Value contiene espacios en blanco, reemplácelos con tabulaciones antes de enviarlos al servidor.
| URL | SQL |
| ---------------------- | -------------- |
| neq | != |
| eq | = |
| gte | >= |
| gt | > |
| lte | <= |
| lt | < |
| startswith | %STARTSWITH |
| contains | [ |
| doesnotcontain | '[ |
| in | IN |
| like | LIKE |
Ejemplo de peticiones:
form/objects/Form.Test.Simple/info?size=2&page=1&orderby=text
form/objects/Form.Test.Simple/all?orderby=text+desc
form/objects/Form.Test.Simple/all?filter=text+eq+Hello
form/objects/Form.Test.Person/infoclass?filter=company_name+contains+a
form/objects/Form.Test.Simple/all?filter=text+in+A9044~B5920
Tenga en cuenta que para el acceso SQL, el usuario debe tener privilegios relevantes de SQL (SELECT en la tabla de formulario).
###
COLLATION cláusula
En un formato: collation=UPPER o collation=EXACT. Fuerza la recopilación específica en la cláusula WHERE. Si se omite, se utiliza la clasificación predeterminada.
Paginación
La paginación está disponible con 25 filas. por página por defecto. Para cambiar el tamaño de página y la página actual, proporcione argumentos de size y page (basados en 1).
### Consultas personalizadas
Invocar form/objects/:class/custom/:query, para ejecutar una consulta personalizada. La consulta personalizada permite al desarrollador determinar el contenido completo de la consulta. Los parámetros de URL además de size y pages no están disponibles. Su método debe analizar todos los demás parámetros de URL (o llamar a analizadores predeterminados desde Form.JSON.SQL).
Para definir su propia consulta personalizada llamada myq:
1. Define un método de clase customqueryMYQ en tu clase de formulario
La firma del método es: ClassMethod customqueryMYQ() As %String
2. El método debe devolver una consulta SQL válida
Demo
Puedes probar RESTForms en línea aquí (user: Demo, pass: Demo) .
Además, hay una aplicación RESTFormsUI: editor de datos RESTForms, échale un vistazo aquí (user: Demo, pass: Demo). Captura de pantalla de la lista de clases.:
Conclusión
RESTForms proporciona capacidades de consulta extensas y personalizables.
Lo siguiente
En el siguiente artículo, me gustaría contarle algunas características avanzadas:
* Traducción de metadatos
* Seguridad y permisos
* Nombre del objeto
Links
* [RESTForms GitHub repository](https://github.com/intersystems-ru/RESTForms/)
RESTForms UI GitHub repository