Para una startup de SaaS en la que estoy involucrado, estoy construyendo una API web RESTful y un par de aplicaciones cliente en diferentes plataformas que la consumen. Creo que tengo la API resuelta, pero ahora me dirijo a los clientes. Mientras leía sobre REST, veo que una parte clave de REST es el descubrimiento , pero parece haber mucho debate entre dos interpretaciones diferentes de lo que realmente significa descubrimiento:
Descubrimiento del desarrollador : el desarrollador codifica grandes cantidades de detalles de API en el cliente, como URI de recursos, parámetros de consulta, métodos HTTP compatibles y otros detalles que han descubierto al examinar los documentos y experimentar con las respuestas de la API. Este tipo de descubrimiento, en mi humilde opinión, necesita un enlace genial y la pregunta de control de versiones de la API, y conduce a un acoplamiento duro del código del cliente a la API. Parece que no es mucho mejor que usar una colección bien documentada de RPC.
Descubrimiento en tiempo de ejecución : la aplicación cliente en sí misma es capaz de descubrir todo lo que necesita con poca o ninguna información fuera de banda (presumiblemente, solo un conocimiento de los tipos de medios con los que se ocupa la API). Los enlaces pueden ser candentes. Pero para que la API sea muy eficiente, parece que se necesitan muchas plantillas de enlaces para los parámetros de consulta, lo que hace que la información fuera de banda vuelva a aparecer. Es posible que haya otras dificultades en las que no he pensado todavía, ya que no he llegado a ese punto en el desarrollo. Pero me gusta la idea de un acoplamiento suelto.
El descubrimiento en tiempo de ejecución parece ser el santo grial de REST, pero veo muy poca discusión sobre cómo implementar tal cliente. Casi todas las fuentes REST que he encontrado parecen asumir el descubrimiento del desarrollador. ¿Alguien conoce algunos recursos de descubrimiento en tiempo de ejecución? ¿Mejores prácticas? ¿Ejemplos o bibliotecas con código real? Estoy trabajando en PHP (Zend Framework) para un cliente. Objective-C (iOS) para el otro.
¿Es el descubrimiento en tiempo de ejecución un objetivo realista, dado el conjunto actual de herramientas y conocimientos en la comunidad de desarrolladores? Puedo escribir a mi cliente para que trate todos los URI de una manera opaca, pero cómo hacerlo de manera más eficiente es una pregunta, especialmente en conexiones de bajo ancho de banda. De todos modos, las URI son solo una parte de la ecuación. ¿Qué pasa con las plantillas de enlaces en el contexto de tiempo de ejecución? ¿Qué tal comunicar qué métodos son compatibles, además de realizar muchas solicitudes de OPCIONES?