Como proyecto de programación personal, estoy trabajando en el raspado de mi catálogo de cursos de la Universidad y proporcionando los datos como una API REST. Recogí todos los datos con éxito y los almacené en una base de datos, y ahora estoy trabajando en la API.¿Cuál es la mejor manera de diseñar una API REST con múltiples filtros?
Los cursos se pueden filtrar en función de muchos criterios: instructor, universidad, créditos, hora, día, etc.
¿Cuál es la mejor manera de proporcionar una API en esta situación?
Opción 1
proporcionan numerosas direcciones URL como
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
example.com/api/bycollegeandinstructor/<collegecode>/<instructorcode>
...and so on
que iba a necesitar para tener una URL para todas las permutaciones. Esto parece muy engorroso, tanto para mí como para los consumidores API, y muy poco seco.
Opción 2
proporcionar solamente APIs para las principales opciones como:
example.com/api/byinstructor/<instructorcode>
example.come/api/bycollege/<collegecode>
Y si el consumidor quiere bycollegeandinstructor
, lo hace el filtrado en su extremo.
Opción 3
El usuario pasa una cadena JSON a mí, y yo la use para obtener los criterios de filtrado
example.com/api/getcourses/<jsonstring>
jsonstring =
{
instructor:<instructorcode>,
college:<collegecode>,
...and so on
}
supongo que en lugar de la cadena JSON, podría también requerir una POST array, pero parece inutitivo para el consumidor ya que él está OBTENIENDO datos.
¿O hay otra forma de hacer esto de la que no tengo conocimiento? Si es la tercera opción la mejor opción, ¿podría proporcionar un breve resumen para preparar una consulta SQL sobre la base de una cadena JSOn que pueda tener una cantidad variable de valores?
Thanls. No estaba pensando en términos de recursos hasta que leí su respuesta – xbonez
Técnicamente, esos son recursos distintos.Realmente no evita los problemas de permutación de esta manera; de hecho, aumentas esos problemas un poco al permitir que la universidad = 123 y el instructor = 321 devuelvan la misma respuesta que instructor = 321 y universidad = 123. Debido a esta explosión, muchas memorias caché no almacenan en caché una respuesta que tiene parámetros de consulta a menos que los configure explícitamente para hacerlo. Por esa razón, generalmente recomiendo la opción 2 si puede identificar algunos patrones comunes en las solicitudes que hacen las personas. – fumanchu
@fumanchu Eso es interesante sobre los cachés que ignoran las respuestas a las solicitudes con parámetros de consulta, no estaba al tanto de eso. Gracias. – Pete