编写api需要一些建议

时间:2011-06-23 16:18:55

标签: python api architecture

我即将编写一个我不会开发用户界面的应用程序。 此应用程序与数据库一起使用并操纵数据库中的数据。

我的问题是:

  • 什么是最好的编程语言独立api方法,以便人们可以为我的应用程序编写Web界面,cli界面或桌面应用程序界面?

我用Python编写应用程序,大多数数据以json格式存储。

谢谢,

5 个答案:

答案 0 :(得分:2)

我有点不确定你究竟要求的是什么,但我想你正在寻找最好的API设计模式。

我建议你看一下关键点:

  • 实施RESTful接口
  • 提供各种数据格式(JSON,XML等)
  • 使语法直观且易于理解
  • 完整的文档
  • 使用正确的回复代码

此外,这里有一些您可能会觉得有用的链接:

  

http://www.slideshare.net/eaton/building-apis-that-rock
  http://www.notiondesign.ca/blog/story/how-not-to-build-an-api/
  http://blog.apigee.com/category/api_best_practices/
  http://blog.isnotworking.com/2007/05/api-design-guidelines.html

此外,这本书可以帮助您入门:

  

http://www.amazon.com/dp/0596529260/

答案 1 :(得分:1)

听起来您已经在Python方法中定义了所有API功能,因此您可以通过使用可以直接或通过简单的包装器服务类公开它们的python Web服务框架来获益。我建议你查看关于web services at python.org的维基页面。

如果您想使用JSON作为Web服务的传输协议,我建议您使用JSON-RPC或JSON-WSP。

如果使用JSON不重要,那么有许多SOAP服务器实现。 Ladon和soaplib可以根据你的python方法实现生成WSDL文件。示例:

<强> soaplib:

from wsgitest.lib.base import *
from soaplib.service import soapmethod
from soaplib.serializers.primitive import String, Integer, Array

class HelloWorldService(SimpleWSGISoapApp):

    @soapmethod(String,Integer,_returns=Array(String))
    def say_hello(self,name,times):
        results = []
        for i in range(0,times):
            results.append('Hello, %s'%name)
        return results

<强>拉冬:

from ladon.ladonizer import ladonize

class Calculator(object):

    @ladonize(int,int,rtype=int)
    def add(self,a,b):
            return a+b

Ladon还会将您的API公开给JSON-WSP和一个包含API文档的网页。

我不知道维基页面上有多少支持Python 3的Web服务,但是Ladon会这样做。

还有非常古老的ZSI python SOAP服务框架。它无法根据您的实际代码生成WSDL。相反,您需要定义wsdl文件并创建服务器存根,然后再实现它们。

答案 2 :(得分:0)

如果您不介意使用SOAP进行传输,可以使用XSD编写WSDL,然后大多数语言都有扩展来从WSDL生成语言绑定和/或客户端。一旦用户拥有语言绑定,他们就可以完成您想要的所有事情:Web界面,CLI,桌面界面等。

答案 3 :(得分:0)

想到某种RPC。本地套接字上的JSON-RPC可能是一个不错的选择。

答案 4 :(得分:0)

Joshua Bloch是API设计的大师。查看他的this video有关API设计的信息。谷歌他的名字和API,以找到他写的更多博客。要点是确保在编写时编写使用API​​的客户端代码,以确保它感觉自然。在编写API时,请编写一个小型Web界面,cli界面和桌面应用程序,以确保使用您的代码的任何人都能轻松完成。

就具体情况而言,使用几种不同的来回传输消息和数据的方式是最好的。尝试使用SOAP / XML和JSON编写它,以便使用它的程序员可以选择对它们有意义的内容。