2012-06-11 24 views
6

Probé Google y buscando en todas partes, pero no pude encontrar una autoridad definitiva sobre este tema. Si bien es cierto que los principios REST, cómo debería diseñar la interfaz HTTP para:RESTful estructura de datos patrones

  1. Una lista (obtener, agregar, insertar en la posición, reordenar, eliminar)

  2. Un conjunto (ordenó obtener, añadir, eliminar)

  3. Una tabla hash (obtener, añadir, eliminar)

NOTA: Estas son estructuras de datos que contienen referencias a los recursos existentes con los identificadores conocidos

+1

1 año después: Como resultado, este tipo de reflexiones filosóficas tienen un impacto mínimo sobre qué tan bien su aplicación resuelve un problema. La verdadera respuesta parece ser que no importa lo que elija, siempre y cuando no viole ninguna especificación/requisito y cause problemas. – dadads

Respuesta

10

Así es como me lo haría por una lista ordenada y tabla hash. Creo que los métodos serían los mismos para un conjunto y una lista:

Lista ordenada

consigue el artículo 123:

GET /list/123 

Anexar un elemento a la lista:

POST /list/ 

Inserte un nuevo artículo en la posición 5:

POST /list/?position=5 

Mover elemento 123 a la posición 3:

PUT /list/123?position=3 

elemento Borrar 123:

DELETE /list/123 

elemento Borrar en la posición 3:

DELETE /list/?position=3 

Por supuesto, el API debe actualizar los índices de todos los elementos al hacer inserción y eliminación.

tabla hash

consigue el artículo "somekey":

GET /hashtable/somekey 

Añadir elemento "somekey":

POST /hashtable/somekey 

Quitar elemento "somekey":

DELETE /hashtable/somekey 
2

@ dadads

No puede definir dicha interfaz directamente.

una lista ordenada (obtener, agregar, insertar en la posición, reordenar, eliminar)

Al excluir "inserta en su posición" y "reordenar" puede perfectamente implementar "get", "añadir" y "eliminar", por ejemplo:

  • Usted define sus recursos/servicio/usuarios
  • puede usar poste/servicio/usuarios añadir nuevos usuarios a los "usuarios" de recogida de
  • Puede GET/servicio/usuarios recuperar usuarios
  • , usted puede obtener/servicio/usuarios/id de usuario para recuperar el usuario particular
  • Puede eliminar/servicio/usuarios/user-id de la colección de usuarios

Este es un ejemplo muy aproximado, aunque describe algunas ideas. Para lograr "reordenar" e "insertar en posición", necesita implementar su propia semántica de acción que puede incluir en su representación de recursos y dejar que el cliente sepa CÓMO realizar estas operaciones. Como referencia, puede ver esta propuesta de especificación JSON PATCH: https://tools.ietf.org/html/rfc6902 que trata de describir tales operaciones.

No es necesario utilizar el formato de medios ya existente, puede definir el suyo en su propio espacio de nombres, por ejemplo: application/vnd.your-company.format-name + json que describe estas capacidades y también anuncia esta información a clientela.

1

Debe desacoplar el mecanismo de transporte de la aplicación subyacente. Consideraría diseñar la aplicación correctamente, luego descubriría cómo acceder a ella a través de HTTP. De esta forma, podría agregar o cambiar fácilmente los mecanismos de transporte (SOAP, SCA, etc.) sin afectar la aplicación subyacente.

Una vez que tenga la aplicación correctamente diseñada, considere acceder a ella desde las solicitudes HTTP a través de algo así como un patrón Adapter o Visitor.

1

Esta es mi idea para reordenar.

Hay un método HTTP llamado PATCH que se utiliza para actualizar fragmentos de un recurso. Dar a su recurso una nueva propiedad llamada index, a continuación, realizar una llamada con el método PARCHE

PATCH /collection 

[ 
    { 
    "id: "original index 0" 
    "index": 1 
    } 
    { 
    "id: "original index 1" 
    "index": 0 
    } 
] 

A continuación, el servidor de servicios de fondo tiene que encontrar la manera de hacer esto de forma atómica. Pero en cuanto a la interfaz, creo que esta es la mejor manera de mantenerse fiel a RESTful.

Alternativamente, hay una solución mejor, pero puede no aplicarse en todos los casos. Dado que ordenar siempre depende de algún tipo de criterio, incluso puede ser tan simple como el orden de inserción. Deje que su colección URL soporte una cadena de consulta orderBy, y deje que este orderBy dicte cómo se ordena el resultado. Luego, durante la reordenación de la llamada del cliente, simplemente actualice la propiedad del recurso utilizada para los criterios de ordenamiento.

0

Llegué a esta pregunta sobre todo buscando una manera RESTful de reordenar. Realmente no me gusta ninguna de las respuestas, así que esto es lo que pienso que es más RESTful.

Para reordenar usted podría hacer el pedido de un recurso:

/list/order

entonces usted puede hacer las operaciones normales en el mismo (para estos ejemplos asumen una lista con 5 elementos que se encuentran en ella):

"items":" [ 
    { 
     "id": "A", 
     "name": "Monkey" 
    }, 
    { 
     "id": "B", 
     "name": "Cow" 
    }, 
    { 
     "id": "C", 
     "name": "Horse" 
    }, 
    { 
     "id": "D", 
     "name": "Turkey" 
    }, 
    { 
     "id": "E", 
     "name": "Tasmanian Devil" 
    }, 
] 

Tenga en cuenta que "orden" no se incluye en la respuesta del recurso. No es necesario: el pedido está especificado implícitamente por el orden de respuesta de los artículos.

GET /list/order

devuelve una lista de identificadores de elementos en su orden correcto

['A','B','C','D','E']

POST /list/order con carga útil ['D','B','C','A','E']

GET /list/order

devuelve una lista de identificadores de elementos en su orden correcto

['D','B','C','A','E']

También es obvio que devolvería los elementos de la lista en el orden correcto cuando se hace una GET en /list.

GET /list

devuelve una lista de artículos en su orden correcto

"items":" [ 
    { 
     "id": "D", 
     "name": "Turkey" 
    }, 
    { 
     "id": "B", 
     "name": "Cow" 
    }, 
    { 
     "id": "C", 
     "name": "Horse" 
    }, 
    { 
     "id": "A", 
     "name": "Monkey" 
    }, 
    { 
     "id": "E", 
     "name": "Tasmanian Devil" 
    }, 
] 
Cuestiones relacionadas