2012-04-06 20 views
21

Empecé a crear una API para un nuevo sitio en el que estoy trabajando.¿Ahorro como reemplazo de API pública para REST?

Originalmente quería convertirlo en una API de REST normal, pero sigo pensando en lo interesante que sería la posibilidad de compilar varias bibliotecas de clientes en un solo lote.

¿Es Thrift una opción viable para una API pública, enchufes y todo, o debería seguir con REST?

Y si REST, ¿cuál sería el mejor enfoque para crear múltiples bibliotecas cliente o simplemente tendría que ensuciarme y escribirlas?

Else if Thrift, ¿podría compilar las bibliotecas y solo ofrecer enlaces de descarga o simplemente dar a los desarrolladores el archivo .thrift para generar su propia biblioteca?

Nota: Todavía es un sitio pequeño así que crearía el archivo Thrift Specification solo para la API.

+0

Depende de: * ¿quién * se conectará y * cómo *? (Personalmente, he encontrado que ProtocolBuffers es más bonito y está mejor diseñado, incluso si no hay un servidor RPC * "estándar". Para RPC más sofisticados hay cosas como ICE pero, de nuevo, * quién * se conectará y * cómo * ?) –

+0

Así que en Google Buffers podría definir los tipos de objeto, serializar y enviar a través de http. ¿Algo así como un reemplazo de JSON pero con un tipo definido que espera un cliente? ¿Tienes alguna experiencia con esto en PHP? –

+2

Protocol Buffers es un protocolo de serialización binario, muy parecido a Thrift is. (Thrift es solo un paquete "todo en uno", ya que también incluye las implementaciones de punto final del servicio.) Existe soporte para los puntos finales de RPC en ProtocolBuffers, ya que [se diseñó el soporte de RPC en] (https://developers.google.com/protocol-buffers/docs/proto#services), pero no hay un servidor "estándar" implementación. Sin embargo, hay proyectos que proporcionan los puntos finales RPC apropiados. –

Respuesta

12

En primer lugar, REST y Thrift son manzanas a naranjas: el primero es un estilo general, este último es el sistema RPC binario específico.

Pero para interfaces públicas, creo que REST usa formatos de texto estándar (JSON o XML, por lo general) tiene más sentido; ya que es más fácil acceder desde cualquier idioma o plataforma; y aunque hay clientes Thrift en muchas plataformas, todavía es más trabajo. También fuerza el estilo de acceso específico en los clientes, prácticamente teniendo que usar una biblioteca de cliente Thrift específica.

Así que la pregunta sería más bien ¿qué es exactamente lo que estás tratando de ganar? ¿Qué es exactamente lo que consideras "genial" allí? Si solo quieres jugar con nueva tecnología, no hay nada de malo en eso, pero primero debes jugar con ella, luego ver si tiene sentido.

+0

Solo mirando diferentes formas de hacer las cosas. ¿Estaba construyendo la API Rest y la Biblioteca Java y comencé a preguntarme si esto no puede hacerse por mí? Pero acepto que REST sería el más útil para cualquiera de los clientes que acceden a la API. Pero todo este trabajo por biblioteca parece un problema. ¿Qué sucede si agrego otro parámetro a un objeto en el resultado de la API? Entonces, tengo que actualizar todas las bibliotecas del cliente para obtener el valor y es probable que ocurran errores. Algún consejo ? –

+2

Lo mismo es cierto con Trhift, n'est pas? Debe modificar el esquema, todos deben recompilarlo a las nuevas clases ... Sin embargo, con Java, REST, uso POJOs, que pueden compartirse. Los paquetes de enlace de datos (Jackson para JSON, JAXB para XML) pueden manejar la serialización/deserialización muy bien. Y luego el cliente HTTP básico (Apache o async-http-client); o mejor aún, Jersey-client, puede hacer que el acceso sea simple. – StaxMan

+0

Tiene sentido gracias. Terminó escribiendo una api de descanso normal y creando bibliotecas personalizadas. –

10

Si su API es bastante simple que se puede expresar con reposo y con un rendimiento aceptable, de lo que sería, probablemente, mejor quedarse REST, ya que por lo general es menor barrera para escribir código de cliente de API basada en REST.

Si, por otro lado, REST tiene problemas de complejidad o rendimiento, vaya con el ahorro u otra cosa más adecuada.

0

Estará en el mismo barco si desarrolla bibliotecas diferentes usted mismo. Creo que RESTO sería más fácil de usar incluso sin la biblioteca (o si implementan la suya). Por otro lado, si lo que le gusta de Thrift es que es binario, json se puede usar de manera similar también, consulte aquí para obtener más información http://bsonspec.org/

0

Una de las grandes ventajas de REST es que no tiene que crea las bibliotecas del cliente. Simplemente puede apuntar los desarrolladores a su lista de puntos finales y ellos deberían poder resolverlos desde allí. Algunos grandes servicios REST mal diseñados proporcionarán bibliotecas de clientes para enmascarar su fealdad, pero si la API es simple y está bien diseñada, no debería ser necesaria.