【问题标题】:How to communicate between different programming languages?如何在不同的编程语言之间进行通信?
【发布时间】:2018-12-06 01:49:10
【问题描述】:

我为我的 python 代码编写了一个 API,如下所示:

def greet_in_python(name, greets="Hello"):
    ## in real life this implementation may be more complex and has other **python** dependencies
    ....
    return greets + " " + name

但是只有python开发者可以使用我的api。

我想要做的是同样的事情,但使用不同的语言,如 javascript,并且无需从 python 重写整个代码。 我认为javascript必须有一种方法可以与这个python api进行通信,执行它并获得结果,以便javascript开发人员也可以使用我的api。

greet_in_javascript(name, greets) {
    // talk to my python api
    // return the result easily
}

在一般意义上,两种语言如何相互交谈?

【问题讨论】:

  • 有很多方法,但现在最流行的选择是使用 REST API。有关基于 Python 的解决方案,请参阅 django-rest-framework.org

标签: javascript python api communication-protocol


【解决方案1】:

有两种非常流行的方法可以做到这一点,可能还有一百万种我会在我的回答中忽略的方法。

管道:

import sys

这是您使用sys.stdinsys.stdout 在操作系统的帮助下读取程序的输入,然后输出结果的地方。这两者都是 Python 中的类文件对象,因此您可能已经熟悉如何使用它们。在 js 和节点中,您有子进程和 exec 等等,它们可以调用您的程序,例如cat file.txt | python myscript.py

API:

import flask, django

通过这种方法,您可以使用flaskdjango 等框架来定义端点(例如example.com/api/my/endpoint),这些端点以对您的业务目的有意义的方式映射到您的API。 API 设计太宽泛,我无法在这个答案中深入研究(但互联网上有比我更好的人写过关于该主题的出色文章。)

编辑:

奖金:PubSub

我可能还应该提到 PubSub,它创建了一个您可以发布和订阅的消息系统,前提是您使用的语言具有该 PubSub 系统的客户端。例如这里是redis https://redis.io/clients 的所有客户端,这里是redis pubsub https://redis.io/topics/pubsub

【讨论】:

  • 我知道管道方法,但我一直觉得这是一种不自然的方式,但既然你指出了,我会尝试的。对于你的第二个,我不希望我的 api 完全依赖于任何框架。但是你能指出那些在这个主题上写得非常出色的人吗?有链接吗?
  • 我会从swagger.io/solutions/api-designblog.miguelgrinberg.com/post/… 开始,我个人觉得它们很有帮助。如果我的回复解决了您的问题,您可以将其标记为有帮助或已回答
猜你喜欢
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-19
  • 2012-04-30
相关资源
最近更新 更多