Estoy construyendo una interfaz REST que actualmente cuenta con más de 250 recursos. Para cuando termine, espero tener más de 1000. Esta es una aplicación ERP que cubre contabilidad, inventario, ventas, costos de mano de obra, ingeniería, etc.
El tamaño o la complejidad de un solo recurso no está directamente relacionado con REST pero más una preocupación de los tipos de medios. Elegí tomar la ruta de definir mi propio tipo de medios ya que también estoy creando el cliente y la interfaz no es para el consumo público. Elegir el mejor tipo de medio para su situación es probablemente una de las partes más difíciles de diseñar una interfaz REST.
Desafortunadamente, la mayoría de la gente parece apuntar en la decisión de medios/tipos y elige la aplicación genérica/json o application/xml y luego usa javascript descargado en el navegador para interpretar el formato. [1] Eso funciona siempre que el único cliente que tenga sea un navegador y no desee que nadie más vuelva a usar su interfaz. Para mí, parece vencer uno de los principales objetivos de REST, es decir, la reutilización fortuita debido a un acoplamiento flexible y formatos estandarizados.
Para explicar mejor lo que quiero decir con esto, considere el caso donde entrega application/json o application/xml a una aplicación cliente. Tan pronto como la aplicación del cliente llegue a ese formato genérico y capture una pieza específica de datos, está creando un acoplamiento oculto entre el cliente y el servidor. Si, en cambio, utiliza el formato de medio "application/vnd.mycompany.myformat + xml", está definiendo explícitamente un contrato con el cliente. Esto tiene una gran ventaja cuando realiza cambios en el formato y tiene la opción de crear "application/vnd.mycompany.myformatV2 + xml"
Las personas perciben que REST es una interfaz poco específica, pero en realidad no es . Una interfaz REST debe ser muy explícita en los tipos de medios precisos que devuelve y espera recibir. Los tipos de medios son el contrato. Si recibe application/xml y utiliza el código de cliente para retirar/Customer/Name, está incumpliendo el contrato.
Las aplicaciones web que usan javascript descargado pueden consumir "aplicación/xml" porque los detalles del contrato no se compilan en el cliente. Sin embargo, el comportamiento del cliente está extremadamente limitado a hacer cualquier cosa que el javascript haya sido preprogramado para hacer. Desafortunadamente, la mayoría de las interfaces RESTful públicas ignoran esta restricción y las personas crean clientes estrechamente relacionados con un contrato no especificado. Es por eso que cuando Twitter cambia su formato, muchos de los clientes se rompen.
Esto suena muy interrelacionado, y es exactamente el tipo de cosa que estaba buscando. Sin embargo, no tengo claro a qué se refiere con "la mayoría de las personas parecen apostar sobre la decisión de los medios/tipos". ¿Cómo ayudará la definición de su propio tipo de medio de comunicación? –
¡Me gustaría votar esta respuesta dos o más veces! – migu