2009-01-13 16 views
11

Estoy planeando instalar un servicio web u otro servicio expuesto a través de Internet. Me gustaría crear una API para que las aplicaciones interactúen con este servicio. Me gustaría que la API se pueda utilizar en diferentes idiomas, como Java, C++, C# o PHP. ¿Cómo puedo mantener una base de código para mi API, pero distribuir buenos binarios empaquetados para todos estos idiomas? Además, es posible que desee considerar que esto también podría ser una plataforma cruzada.Language Agnostic API

Actualización 1

estoy primeros días en Servicios Web, pero que uno de los puntos clave es que un montón de herramientas apoya la implementación de clientes basado en la descripción de el servicio como WDSL. No he entregado ningún software del lado del cliente con todo lo que he hecho, I espero que cualquier usuario pueda construir sus propios clientes adecuados a sus necesidades . --Brabster's Answer

No me opongo a que sea un servicio web directo y luego entregue un archivo WSDL. Pero, ¿y si quiero que la API del cliente haga algo de lógica, encriptación, comprobación de errores, etc.?

Actualización 2

En lo que espera el cliente que es usando su API para hacer cualquier cosa, que no se puede! No hay nada que pueda hacer para asegurarse de que el consumidor de la API hará lo correcto. Es por eso que el manejo robusto de errores es tan importante que . Debe verificar y duplicar comprobar cualquiera y todo lo que viene del cliente. Siempre debe ser sospechoso e incluso asumir que es malicioso. Realmente no hay buena manera de evitar ese hecho. --Ryan respuesta de Guill

Mi idea original era crear un archivo DLL o Asamblea en .NET, entonces el cliente está haciendo llamadas en el código que se ejecuta en el cliente. Este código puede comunicarse a través de cualquier protocolo de comunicaciones con el servidor, pero mi API se estaría ejecutando en su casilla. Supongo que REST no logra esto. Parece que en REST todo sigue siendo una publicación HTTP. Es casi servicios web sin jabón.

Actualización 3

He aceptado la respuesta de Ryan Guill. Creo que la idea general es que necesito exponer un servicio de red de algún tipo, con la barrera más baja para el cliente. De esa forma, cualquiera puede conectarse. Entonces solo tengo que ejecutar todo mi código en el servidor. Eso parece ser aceptado como el único deseo de lograr realmente la independencia de la plataforma y el lenguaje que busco.

Gracias por toda la aportación.

+0

Consulte esta pregunta: http://programmers.stackexchange.com/questions/157536/how-can-i-write-a-set-of-functions-that-can-be-invoked-from-almost-any -programa –

Respuesta

13

volvería a usar una API REST, similar a la forma en que funciona la API de Flickr: http://flickr.com/services/api/

Es bastante simple de crear y mantener, las mayores desventajas son que se necesita una gran cantidad de documentación (pero prácticamente ninguna manera usted hace una API tendrá este problema) y ese manejo robusto de errores es imprescindible.

Pero en mi opinión, es la mejor manera de crear una API que sea la más cercana al lenguaje de plataforma cruzada.

Más información aquí: http://www.xfront.com/REST-Web-Services.html

actualización: El remitente añade lo siguiente al de la publicación:

yo no estoy en contra de lo que es un servicio web directamente a continuación, dar un archivo WSDL. Pero, ¿y si quiero que la API del cliente haga algo de lógica, encriptación, comprobación de errores, etc.?

Personalmente, no me gusta usar SOAP (utilizando un WSDL). Hay una gran cantidad de gastos indirectos para usar SOAP, tanto en el servidor como en el cliente. Creo que es por eso que ves cada vez más API públicas escritas usando REST. Realmente reduce la barrera de entrada al mínimo común denominador, permitiendo que cualquier cosa que pueda usar HTTP básico (GET y POST (también PUT y DELETE para la forma "correcta" de hacerlo)) use la API.

Algunos ejemplos más de la utilización de REST API pública por escrito de: twitter, vimeo, Google

En lo que espera el cliente que utiliza el API de hacer nada, no se puede! No hay nada que puedas hacer para garantizar que el consumidor de la API haga lo correcto. Es por eso que el manejo robusto de errores es tan importante. Debe verificar y verificar dos veces cualquier cosa que provenga del cliente. Siempre debes sospechar de ello e incluso asumir que es malicioso. Realmente no hay una buena forma de evitar ese hecho.

Actualización 2: el remitente añade lo siguiente al de la publicación:

Mi idea original era crear un archivo DLL o Asamblea en .NET, entonces el cliente está haciendo llamadas en el código que se está ejecutando lado del cliente. Este código puede comunicarse a través de cualquier protocolo de comunicaciones con el servidor, pero mi API se estaría ejecutando en su casilla. Supongo que REST no logra esto. Parece que en REST todo sigue siendo una publicación HTTP. Es casi servicios web sin jabón.

Sin duda puede hacer esto, pero eso solo funcionará para los lenguajes .NET, lo que significa que sus beneficios multiplataforma y entre idiomas están fuera de la ventana. Y aún así, al final, ¿realmente estás impidiendo algo? El desarrollador usará su API remota o su DLL o ensamblado local. De cualquier manera, él tendrá que saber cómo usarlo y usarlo correctamente, de lo contrario, lanzará un error. Todo lo que realmente estás haciendo es cambiar de dónde salen los errores.Lo cual puede ser importante para usted (de ser así, mencione por qué) pero realmente no está cambiando nada en la ecuación.

Pero tiene razón al decir que REST es algo así como servicios web sin SOAP. Técnicamente, REST también es servicios web, es solo que los servicios web han llegado a significar SOAP en general. Realmente es una forma diferente de lograr lo mismo. Sin embargo, las mayores diferencias son que requiere más programación y pensamiento de su parte (y potencialmente más programación del lado del cliente), pero usted cambia eso por robustez, menos sobrecarga tanto para el consumidor como para el servidor y la audiencia más amplia posible para la API . Realmente es el denominador común más bajo.

+0

Respondí tu respuesta. Me gusta la idea, pero estaba pensando en algo sobre lo que tenía más control. –

+0

impresionante. Deberías ver mi respuesta a tu respuesta;) HTH –

2

Estoy en los primeros días de los servicios web, pero creo que uno de los puntos clave es que muchas herramientas admiten la implementación de clientes según la descripción del servicio como WDSL.

No he entregado ningún software del lado del cliente con nada de lo que he hecho, espero que cualquier usuario pueda construir sus propios clientes adecuados a sus necesidades.

Si echa un vistazo a la API de Flickr como sugiere una de sus otras respuestas, no creo que proporcionen el código del lado del cliente, otras personas han creado y contribuido cosas del lado del cliente.

+0

He respondido a tu respuesta. –

0

Respuesta simple, no.

Respuesta compleja: cree una API y compílela en un dll COM. Luego, solo crea el código contenedor para los idiomas que no pueden manejar eso.

Respuesta simple # 2, hacer que el servicio original sea tan trivial, o tan universalmente aceptable, como para no requerir una API (usualmente implementé esto a través de la base de datos del servidor.) Feo pero cualquier lenguaje que pueda acceder a una base de datos puede el programa).

1

Sugiero escribir la API en el lenguaje de programación Haxe para que el código fuente se pueda traducir directamente a todos los lenguajes de programación que mencionó. El lenguaje de programación Haxe se puede traducir (o "trans compilar") a todos los lenguajes de programación que mencionó en la publicación original, así como a algunos otros.