2010-06-06 14 views
9

Estoy escribiendo un módulo envoltorio Perl en torno a un servicio web REST y espero tener algunos consejos sobre la mejor manera de diseñar el módulo.API Wrapper Architecture Best Practice

He estado buscando un par de diferentes módulos de Perl para inspirarse.

Flickr::Simple2 es básicamente un gran archivo con métodos que abarcan los diferentes métodos en la API de Flickr, p. getPhotos() etc.

Flickr::API es una subclase de otro módulo (LWP) para realizar solicitudes HTTP. Así que, básicamente, solo le permite realizar llamadas a través del módulo, utilizando LWP, que va al método API correcto/URL sin definir ningún método de envoltura. Eso se explica bastante mal, pero básicamente tiene un método que toma un argumento (un nombre de método API) y construye la llamada API correcta, p. request()/response().

Un diseño alternativo sería como el primero descrito, pero menos monolítico, con clases separadas para "áreas" separadas de la API.

Me gustaría seguir los métodos modernos/mejores prácticas de Perl, así que estoy usando Dist::Zilla para construir el módulo y Moose para las cosas OO pero agradecería algo de información sobre cómo diseñar/diseñar realmente mi envoltorio.

Se agradecerán guías/tutoriales o sugerencias para otros módulos bien diseñados.

Saludos

Respuesta

6

esto depende en cierta medida de la amplitud/profundidad de API que está tratando de envolver.

Si solo tiene unas pocas llamadas API, el primer enfoque es correcto.

Si tiene API muy complejas que tienen el modo "simple" que desea exponer al usuario, un patrón es tener el módulo principal y la subclase como Principal :: Módulo :: Simple que rodearía el subyacente principal módulo.

Como mencionó, una API muy amplia podría beneficiarse al dividirse en áreas con clases paralelas (posiblemente heredando o utilizando una clase base) responsables de envolver cada área. Solo asegúrate de factorizar todas las cosas comunes para avivar cualquier duplicación de código/diseño.

8

Joshua Bloch tiene buenos consejos sobre "How to Design a Good API and Why it Matters" (video, 2007).

El slides (PDF).

+0

Creo que la pregunta era sobre el envoltorio API, ¿no cómo escribir la API? – itsaboutcode

+0

@itsaboutcode: la pregunta es sobre envolver una API web con una API de Perl. Esto está escribiendo otra API, por lo que los consejos de Joshua Bloch son relevantes. – dolmen