Al diseñar una interfaz RESTful, la semántica de los tipos de solicitud se considera vital para el diseño.
- GET - Lista de colección o elemento de recuperación
- PUT - Reemplazar colección o elemento
- POST - Crear colección o elemento
- BORRAR - Bueno, erm, eliminar colección o elemento
Sin embargo, esto no parece cubrir el concepto de "búsqueda".
Por ejemplo, al diseñar un conjunto de servicios web que admiten un sitio de búsqueda de empleo, es posible que tenga los siguientes requisitos:
- Obtener anuncio de trabajo individual
- Llegar a
domain/Job/{id}/
- Llegar a
- Crear anuncio de trabajo
- Publicar en
domain/Job/
- Publicar en
- Actualizar anuncio de trabajo
- PONER a
domain/Job/
- PONER a
- Eliminar anuncio de trabajo
- BORRAR a
domain/Job/
- BORRAR a
"Obtener todos los trabajos" también es simple:
- Llegar a
domain/Jobs/
Sin embargo, ¿cómo cae el trabajo "búsqueda" en esta estructura?
Usted podría reclamar que es una variación de "colección de listas" y poner en práctica como:
- Llegar a
domain/Jobs/
Sin embargo, las búsquedas pueden ser complejas y es completamente posible producir una búsqueda que genere una cadena GET larga. Es decir, haciendo referencia a una pregunta SO aquí , hay problemas al usar cadenas GET de más de aproximadamente 2000 caracteres.
Un ejemplo podría estar en una búsqueda facetada, continuando con el ejemplo de "trabajo".
Puedo permitir la búsqueda en facetas: "Tecnología", "Título del trabajo", "Disciplina", así como palabras clave de texto libre, edad del trabajo, ubicación y salario.
Con una interfaz de usuario fluida y una gran cantidad de tecnologías y títulos de trabajo, es factible que una búsqueda abarque una gran cantidad de opciones de facetas.
Ajusta este ejemplo a CV, en lugar de trabajos, trae aún más facetas, y puedes imaginar fácilmente una búsqueda con un centenar de facetas seleccionadas, o incluso solo 40 facetas, cada una de las cuales tiene 50 caracteres (por ejemplo, títulos de trabajo, nombres de universidades, Nombres del empleador).
En esa situación, puede ser conveniente mover un PUT o POST para garantizar que los datos de búsqueda se envíen correctamente. P.ej:
- Publicar en
domain/Jobs/
Pero semánticamente esa es una instrucción para crear una colección.
También podría decir que expresará esto como la creación de una búsqueda:
- Publicar en
domain/Jobs/Search/
o (como lo sugiere el burninggramma a continuación)
- Publicar en
domain/JobSearch/
Semánticamente parece tener sentido, pero en realidad no estás creando nada, estás haciendo una solicitud de datos.
Entonces, semánticamente es un GET , pero no se garantiza que GET respalde lo que necesita.
Entonces, la pregunta es: tratando de mantenerme tan fiel al diseño RESTful como sea posible, mientras me aseguro de mantenerme dentro de las limitaciones de HTTP, ¿cuál es el diseño más apropiado para una búsqueda?
domain/Jobs?keyword={keyword}
. Esto funciona bien para mí :) Mi esperanza es que elSEARCH
verbo se convierta en un estándar. programmers.stackexchange.com/questions/233158/…