¿Por qué esta consulta de OData con $ count = true devuelve un objeto?

2
F-H 2020-04-20 23:21.

Estoy tratando de averiguar cómo admitir correctamente la devolución de la cantidad de elementos en un conjunto de datos (filtrado) en mi API de OData.

Tengo entendido que agregar el $count=trueargumento a la cadena de consulta debería permitir esto.

Ahora, según el ejemplo del tutorial en los documentos oficiales , agregar ese parámetro debería hacer que la API web devuelva solo un número entero:

La siguiente solicitud devuelve el número total de personas de la colección.

GET serviceRoot/People?$count=true

Carga de respuesta

20

Por otro lado, esta respuesta 1 aceptada y bastante votada indica que una consulta con $count=truedevolverá un objeto , una de cuyas propiedades contiene dicho número entero. Proporciona una consulta ejemplar en un punto final de muestra:

https://services.odata.org/V4/Northwind/Northwind.svc/Customers?$count=true&$top=0&$filter=Country eq 'Germany'

De hecho, el resultado real de ese punto final es el objeto complejo

{
  "@odata.context": "https://services.odata.org/V4/Northwind/Northwind.svc/$metadata#Customers",
  "@odata.count": 11,
  "value": []
}

en lugar del resultado esperado de un solo número entero

11

¿Por qué es esto? ¿Estoy entendiendo mal la documentación?

1 : La respuesta tenía 25 votos a favor al momento de escribir este artículo.

1 answers

0
Chris Schaller 2020-08-12 13:20.

El problema principal es que la especificación OData v4 es un estándar en evolución, ya que muchas implementaciones manejan algunas solicitudes de manera diferente, ya sea porque el estándar ha cambiado o porque el estándar era difícil de implementar o el comportamiento sugerido en la especificación no se ajusta al resto. de las convenciones.

¿Por qué es esto? ¿Estoy entendiendo mal la documentación?

Entonces, su problema principal es que estaba leyendo la documentación incorrecta para la API que estaba consultando. Es importante reconocer que con cada implementación de un estándar depende del desarrollador elegir qué tan conformes con ese estándar son, por lo que debe leer la documentación que va específicamente con esa API.

Esta es la especificación en cuestión para OData v4:

4.8 Abordar el recuento de una colección
Para abordar el valor bruto del número de elementos en una colección, los clientes agregan / $ count a la ruta de recursos de la URL que identifica el conjunto de entidades o la colección.

Los /$countruta sufijo identifica el recuento de número entero de registros de la recolección y no se debe combinar con las opciones de consulta del sistema $top, $skip, $orderby, $expand, y $format. El recuento no deben verse afectadas por $top, $skip, $orderby, o $expand. El recuento se calcula después de aplicar los /$filtersegmentos de ruta $filtero las $searchopciones de consulta del sistema a la colección.

En la implementación de .Net, dado que $countes el resultado de una consulta, debe evaluarse como parte de la canalización de opciones de consulta, no como parte de la ruta.

Opciones de consulta de MS OData: recuento
La $countopción de consulta del sistema permite a los clientes solicitar un recuento de los recursos coincidentes incluidos con los recursos en la respuesta. La opción de consulta $ count tiene un valor booleano de verdadero o falso.

Ejemplos:

  • Devuelve, junto con los resultados, el número total de productos de la colección. http://host/service/Products?$count=true
  • El recuento de entidades relacionadas se puede solicitar especificando la $countopción de consulta dentro de la $expandcláusula.http://host/service/Categories?$expand=Products($count=true)

Desde el punto de vista de la implementación, mezclar esta opción de consulta en la ruta rompe la convención utilizada para todos los demás procesamientos y análisis de URL, realmente es la extraña. ruta y consulta.

Respecto a la respuesta del objeto

En la implementación de .Net, debido a que $countes compatible con expansiones de colecciones, así como en la raíz (ver el segundo ejemplo), han optado por inyectar el valor como metadatos / atributos mezclados con los resultados. De esa manera, la respuesta seguirá siendo válida para fines de serialización y el comportamiento del recuento volverá a ser coherente donde sea que se utilice.

Este último ejemplo lo dejo de una de mis propias API, demostrando la respuesta de atributo para colecciones expandidas, si $count=trueno devolviera el gráfico de objeto, no podría llegar a los recuentos de las expansiones en absoluto:

https://localhost/OData/Residents?$count=true&$expand=Entity($select=Id;$expand=Contacts($count=true;$top=0))&$select=id&$top=2

{
    "@odata.context": "https://localhost/odata/$metadata#Residents(Id,Entity(Id,Contacts()))", "@odata.count": 29, "value": [ { "Id": 13110, "Entity": { "Id": 13110, "[email protected]": 6, "Contacts": [] } }, { "Id": 13164, "Entity": { "Id": 13164, "[email protected]": 6, "Contacts": [] } } ], "@odata.nextLink": "localhost/OData/Residents?$expand=Entity%28%24select%3DId%3B%24expand%3DContacts%28%24count%3Dtrue%3B%24top%3D0%29%29&$select=id&$top=2&$skip=2"
}

MORE COOL STUFF

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que tiene 'envenenamiento por mercurio y plomo' probablemente por voltear 'casas asquerosas'

La estrella de HGTV, Christina Hall, revela que le diagnosticaron envenenamiento por mercurio y plomo, probablemente debido a su trabajo como manipuladora de casas.

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

La estrella de 'Love Is Blind' Brennon Lemieux responde a los cargos de violencia doméstica

Recientemente salió a la luz un informe policial que acusa a la estrella de 'Love Is Blind', Brennon, de violencia doméstica. Ahora, Brennon ha respondido a los reclamos.

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia Judd en un momento festivo de pánico

Conozca cómo Wynonna Judd se dio cuenta de que ahora es la matriarca de la familia mientras organizaba la primera celebración de Acción de Gracias desde que murió su madre, Naomi Judd.

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Experto en lenguaje corporal explica los 'paralelos' entre Kate Middleton y la princesa Diana

Descubra por qué un destacado experto en lenguaje corporal cree que es fácil trazar "tales paralelismos" entre la princesa Kate Middleton y la princesa Diana.

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los láseres arrojan luz sobre por qué necesita cerrar la tapa antes de descargar

Los inodoros arrojan columnas de aerosol invisibles con cada descarga. ¿Como sabemos? La prueba fue capturada por láseres de alta potencia.

The Secrets of Airline Travel Quiz

The Secrets of Airline Travel Quiz

Air travel is far more than getting from point A to point B safely. How much do you know about the million little details that go into flying on airplanes?

Where in the World Are You? Take our GeoGuesser Quiz

Where in the World Are You? Take our GeoGuesser Quiz

The world is a huge place, yet some GeoGuessr players know locations in mere seconds. Are you one of GeoGuessr's gifted elite? Take our quiz to find out!

¿Caduca el repelente de insectos?

¿Caduca el repelente de insectos?

¿Sigue siendo efectivo ese lote de repelente de insectos que te quedó del verano pasado? Si es así, ¿por cuánto tiempo?

Donald Trump acaba de despedir al director del FBI James Comey

Donald Trump acaba de despedir al director del FBI James Comey

Foto: AP El presidente Donald Trump acaba de despedir a James Comey, director del Buró Federal de Investigaciones. En un comunicado el martes, la Casa Blanca dijo que Trump había destituido a Comey de su cargo actuando “en base a las claras recomendaciones de ambos, el vicefiscal general Rod Rosenstein y el fiscal general Jeff Sessions.

La startup eléctrica NIO quiere vender un SUV de tres filas en China el próximo año

La startup eléctrica NIO quiere vender un SUV de tres filas en China el próximo año

Todas las fotos le dan crédito a NIO NIO, la startup de vehículos eléctricos respaldada por China conocida por su loca búsqueda para romper récords con su superdeportivo EP9, finalmente ha elaborado planes para un automóvil normal para la gente común. El NIO ES8 es un SUV eléctrico de tres filas exclusivo para el mercado chino con espacio para siete.

El LG G6 es demasiado simple

El LG G6 es demasiado simple

Todas las fotos: Alex Cranz / Gizmodo Es difícil destacar en el mundo de los teléfonos inteligentes, especialmente si su teléfono no hace nada único. LG lo sabe y nunca ha rehuido probar nuevas ideas.

La fuerza inicial es un increíble programa de entrenamiento con pesas para principiantes

La fuerza inicial es un increíble programa de entrenamiento con pesas para principiantes

Has escuchado que levantar pesas es bueno para ti y te hace más fuerte, más seguro y, en general, más malo. Pero tal vez no esté seguro de qué hacer.

Regala el 'mejor sueño de todos' con estos vaporizadores de ducha de eucalipto para el día de San Valentín

Regala el 'mejor sueño de todos' con estos vaporizadores de ducha de eucalipto para el día de San Valentín

Los vaporizadores de ducha de eucalipto BodyRestore tienen más de 11,000 calificaciones de cinco estrellas en Amazon. Ofrezca el producto de spa para el hogar como un regalo del Día de San Valentín para alguien que necesita disfrutar de un poco de cuidado personal.

Esta aspiradora de mano de $ 250 con 'Wicked Suction Power' ahora tiene un 75% de descuento en Amazon

Esta aspiradora de mano de $ 250 con 'Wicked Suction Power' ahora tiene un 75% de descuento en Amazon

Toneladas de compradores de Amazon recomiendan la aspiradora de mano Umlo H6, y está a la venta en este momento. El dispositivo de mano está equipado con un filtro HEPA y viene con varios accesorios. Compre la aspiradora de mano mientras tiene un 75 por ciento de descuento en Amazon

Octavia Spencer dice que la coprotagonista de 'The Help', Sissy Spacek, 'en realidad' la recordó después de hacer una pasantía en su película a los 17

Octavia Spencer dice que la coprotagonista de 'The Help', Sissy Spacek, 'en realidad' la recordó después de hacer una pasantía en su película a los 17

Octavia Spencer trabajó como pasante en la película de 1990 The Long Walk Home, protagonizada por Sissy Spacek, mucho antes de que coprotagonizaran The Help juntas.

Julia Fox se disculpa por no saber que 'Mascara' era el código de agresión sexual del usuario de TikTok

Julia Fox se disculpa por no saber que 'Mascara' era el código de agresión sexual del usuario de TikTok

"Realmente lo siento. Realmente estoy mostrando mi edad en este momento", dijo Julia Fox en un video de respuesta compartido en su TikTok.

¿Merrick Garland le ha fallado a Estados Unidos?

Es más de la mitad de la presidencia de Biden. ¿Qué está esperando Merrick Garland?

¿Merrick Garland le ha fallado a Estados Unidos?

Creo, un poco tarde en la vida, en dar oportunidades a la gente. Generosamente.

Lo bueno y lo feo: 2022

Lo bueno y lo feo: 2022

ya no lo entiendo Parece casi imposible medir correctamente lo que es un "golpe".

Solo por diversión: las mejores reproducciones de música nueva de 2022

Solo por diversión: las mejores reproducciones de música nueva de 2022

¡Finalmente! Bienvenido a mis mejores reproducciones de música nueva de 2022. Comparto esto todos los años para conectarme con amigos.

el es todo lo que tengo

el es todo lo que tengo

Revisa tu corazón. Nuestros corazones a menudo se desvían.

Language