Paginación, clasificación y complementos personalizados en Ktor | de Hitesh Chopra | octubre 2022
Hoy, en este artículo, vamos a hablar sobre cómo implementar la paginación, la clasificación y los complementos personalizados con Ktor. Esta es una extensión de mi artículo anterior sobre el desarrollo de API REST con Ktor. Lea el artículo antes de leerlo para tener una buena base sobre qué es Ktor y cómo desarrollar API REST básicas con Ktor. Así que comencemos sin mucha demora.Aunque la mayoría ya lo sabéis, para mis amigos que no sepan qué es la paginación, os lo explicaré rápidamente con la ayuda de un ejemplo. Si está navegando por una aplicación con una lista de elementos como Swiggy, Netflix, Disney Hotstar o una aplicación que muestra los resultados de la búsqueda como una lista de elementos, es posible que haya notado que inicialmente solo se ven 7 u 8 elementos de la lista. y si se desplaza más hacia la derecha (si la lista es horizontal), aparecerá una marca de carga o un efecto de brillo antes de que se carguen los siguientes 7-8 elementos. Esto se llama paginación. Técnicamente, con una API paginada, especificamos el número de página y la cantidad de elementos para cargar en la lista y, en consecuencia, solo se devuelven muchos elementos de la API. Esto es muy útil cuando nuestra lista es muy grande. Hay dos tipos de paginación, paginación desplazada y paginación de conjunto de claves. Usé paginación compensada en este ejemplo. Hay dos aspectos principales para compensar la paginación: limit (el número de resultados) y offset (el número de registros a omitir). Comencemos con el código rápidamente. Como se mencionó en el artículo anterior, usamos Ktorm ORM en nuestro proyecto.divertida fetchPaginatedNotes(página: Int, tamaño: Int): Lista
- cero -: Llamada telefónica.consulta.parámetros de consulta[“sort”] here se refiere a la consulta de clasificación en el punto final. Si esa consulta no está allí, es Cero, Simplemente busque y devuelva todos los elementos presentes en la base de datos sin ningún tipo de clasificación.
- diferente -: si el valor de la consulta para ordenar es diferente a ascendente o descendiendo, No es válido y no queremos enviar la respuesta correcta al cliente en este caso porque es una solicitud no válida, por lo que devolví un código de error. 406 que significa ______________ Inaceptable.
- Ascendiendo descendiendo -: Como sugiere el nombre, esto se usa para enviar una lista ascendente o descendente de elementos al cliente. En función del tipo de intercalación solicitado por el cliente, el servidor calcula (consulta) la intercalación correcta y se la devuelve al cliente.
Echemos un vistazo a nuestra función que consulta lo mismo.divertida fetchSortedNotes(esDescendente: Booleano? = INCORRECTO): lista
A partir de la versión 2.0.0, Ktor proporciona una nueva API para crear complementos personalizados. En general, esta API no requiere la comprensión de los conceptos internos de Ktor, como canalizaciones, etapas, etc. En su lugar, tiene acceso a diferentes etapas de procesamiento de solicitudes y respuestas utilizando los controladores onCall, onCallReceive y onCallRespond.
El proceso de creación de un complemento y lo que significa onCall, onCallReceive y onCallRespond, etc. está muy claramente definido en la documentación aquí, así que no entraría en todos y cada uno, pero creemos rápidamente dos complementos tan pequeños pero útiles y usémoslos en nuestro aplicaciónimportar io.ktor.servidor.complementos.*valor ErrorLoggerPlugin = createApplicationPlugin(nombre = «ErrorLoggerPlugin») {activado (llamada fallida) { _, porque ->imprimir(«ERROR DE COMPLEMENTO: la llamada a la API falló debido a ${porque.Mensaje}»)}}valor RequestLoggerPlugin = createApplicationPlugin(nombre = «RequestLoggerPlugin») {al llamar { Llamada telefónica ->Llamada telefónica.consulta.origen.aplicar {imprimir(«URL de solicitud: $esquema://$host:$puerto$uri»)}}}Como sugiere el nombre, el primer ErrorLoggerPlugin es responsable de imprimir todas las llamadas API fallidas y el motivo del error. En una aplicación de producción real, puede considerarla como el monitoreo de los registros de errores en Firebase u otros SDK y alertarlo si hay un aumento repentino en los errores de la API. El segundo RequestLoggerPlugin de nuevo como. Como sugiere el nombre, se registran todas las solicitudes entrantes del cliente, otra métrica importante para el monitoreo.
Instalar complementos
Hemos visto cómo crear nuestro propio complemento personalizado, ahora veamos cómo usarlo en nuestra aplicación. Queremos usar los complementos en 1. todos los puntos finales o 2. puntos finales seleccionados. Ktor nos lo pone fácil nuevamente, para los complementos con ámbito de aplicación, simplemente use createApplicationPlugin mientras crea su complemento y, si tiene el alcance de una ruta, use createRouteScopedPlugin.divertida Aplicación.módulo() {configureLogging()}divertida Aplicación.configureLogging() {instalar(ErrorLoggerPlugin)instalar(SolicitarLoggerPlugin)} Instalé estos dos complementos según el caso de uso de mi aplicación, pero también puede instalarlos para una ruta específica, por ejemplo, .configureLogging() y agregarlo en notesRoute() .divertida Aplicación.módulo() {configureLogging()configureRouting()}divertida Aplicación.configureLogging() {instalar(ErrorLoggerPlugin)instalar(SolicitarLoggerPlugin)}divertida Aplicación.configureRouting() {reenvío {NotasRutas()AuthenticateRoutes (Secreto, Expositor, Audiencia)}}divertida Route.notes() { instalar(RequestLoggerPlugin)recibir(«/Observaciones») {}} y RequestLoggerPlugin a -:valor RequestLoggerPlugin = createRouteScopedPlugin(nombre = «RequestLoggerPlugin») {al llamar { Llamada telefónica ->Llamada telefónica.consulta.origen.aplicar {imprimir(«URL de solicitud: $esquema://$host:$puerto$uri»)}}}Esto le permite crear e implementar complementos personalizados para su aplicación o rutas específicas. Puedes encontrar el código completo en mi repositorio de GitHub ktor-apiPróximamente habrá muchos más artículos interesantes sobre Ktor, Kotlin y Android 🙂 Comparta sus comentarios en los comentarios y mencione cuál desea que sea el próximo artículo para Ktor. Gracias por dedicar su valioso tiempo leyendo este artículo, ¡compártalo con sus amigos!