【问题标题】:Elegant way to make RPC Calls to Python Functions in a Django Project在 Django 项目中对 Python 函数进行 RPC 调用的优雅方式
【发布时间】:2011-10-29 04:20:45
【问题描述】:

我正在尝试创建一个 django 网站来访问 MySQL 数据库中的数据。目的是也在 Dojo (javascript) 中创建一个 UI。此外,我希望 django 后端也提供 web 服务(用于 python 函数的 RPC)以允许远程访问 MySQL 数据库。例如,如果有人想使用 Perl 脚本来访问数据库(以及可能的其他附加功能,例如基于数据库中数据的计算),他们可以使用他们的母语 (Perl) 来实现。

现在理想情况下,Web 服务 API 对于 javascript 以及想要访问这些服务的另一个远程服务是相同的。我发现 JSON-RPC 是一个很好的方法,因为除了许多额外的好处之外,通常在 javascript 中内置了对此的支持。还有很多人似乎更喜欢 SOAP 而不是 JSON。

我已经看到了几种方法:

1) 为您要访问的每个函数创建一个唯一的 URI: https://code.djangoproject.com/wiki/JSONRPCServerMiddleware

2) 创建一个访问点,并传递JSON包中的方法名。在此特定示例中,自动生成 SMD。 https://code.djangoproject.com/wiki/Jsonrpc

(1) 的问题是,如果要访问的函数很多,那么将使用很多 URI。这似乎不是一个优雅的解决方案。 (2) 的问题是我需要将函数与所有函数的列表进行比较。同样,这也不是一个优雅的解决方案。

有没有办法我们可以利用 (1) 和 (2) 的优势来创建一个接口: - 只有一个 URI 用作访问点 - 直接调用函数(无需与函数列表进行比较)

对此的任何帮助将不胜感激。谢谢!

【问题讨论】:

  • 我很好奇你认为这应该如何工作,当你不想使用 URL 映射到你的函数,并且你不想在处理请求时进行映射.您如何确定服务器会找出您要调用的函数?

标签: python django json rpc smd


【解决方案1】:

使用REST API怎么样?

【讨论】:

  • 嗯 REST 只是一种仅使用 JSON 样式接口的方法。在我描述的 REST API 倾向于 (1) 的示例中。实际上,我正在为 RPC 样式界面寻找更好的解决方案。
  • REST API 在这里是更好的选择,因为 REST 与语言无关。简而言之,您希望 API 没有工作,但不能那样做。要么你有很多 URI,要么你有很多比较。
【解决方案2】:

进行比较的一种可能性是使用这样的字典:

def func1(someparams):
    #do something
    return True

def func2(sameparams):
    #do something else
    return True


{'func1': func1,
 'func2': func2}

然后,当您获得 API 调用时,您在 dict 中查找它并从那里调用,任何不在 dict 中的函数都会获得 404 处理程序。

【讨论】:

    【解决方案3】:

    听起来您真正想要的是某种 RPC 服务器(例如,SOAP,使用 soaplib),它是用 python 编写并使用您的应用程序的数据模型,以及您构建的任何其他 API 来处理业务逻辑.

    所以我可能会使用soaplib 实现Web 服务,并根据需要让它调用数据模型和其他python 模块。想要访问您的 Web 应用程序数据的人会使用 SOAP 服务,但 Web 应用程序将使用底层数据模型 + api(为了速度,您的 Web 应用程序也可以使用 SOAP 服务,但会更慢)。

    【讨论】:

      猜你喜欢
      • 2021-05-27
      • 2011-09-01
      • 1970-01-01
      • 1970-01-01
      • 2014-09-01
      • 1970-01-01
      • 1970-01-01
      • 2018-11-30
      • 1970-01-01
      相关资源
      最近更新 更多