允许跨网络调用函数的现代方法

Modern ways to allow function calls across the network

将此视为对现代系统设计范例的调查:

假设我编写了一个程序来return 2 个给定数字的总和。让我们称它为 Amazing Adder.My 目标是让这个 Amazing Adder 可供其他人使用。截至 2018 年,将此 Amazing Adder 作为一项公开服务提供给世界的主流和现代方式是什么?我对后端架构更感兴趣,而不是用户界面。根据我对系统设计的了解,我可以想到:

1) 使其成为 REST 服务,但是这个用例是否非常适合 REST 范例?我将如何调用我的端点?如果我所做的只是在没有状态信息的情况下添加数字,我需要支持哪些操作(更新、删除等)?

2) 通过 http 使此正常 JSON RPC。因此,用户向 http://www.theAmazingAdder.com/add 发送一个 http POST 请求,负载为 {'number1':2,"number2":3},我的服务将 return {'sum': 3}

3) 通过 Profobuf 或 Thrift 使其成为二进制 RPC 格式。这是矫枉过正吗?客户端和服务器都必须具有的 'code definition' 是什么?

4) 传统的 Python 酸洗还是 java serialization/rmi 通过网络?这还合适吗?

我错过了任何其他流行的现代范式吗?

今天(2​​018 年)"mainstream" 和 "modern" 做这样的事情的方法是使用 grpc or have a rest service speced with OpenApi

使用哪种方法很大程度上取决于上下文

为什么我选择这两种方法?它们允许你为你的 "Amazing Adder" 定义一个协议,一个接口,然后用你想要的任何语言实现它(前提是有一个用于 grpc 的库),同时允许你自动生成多种语言的客户端库基于你的原型文件。

在 grpc 中,您将使用您的函数定义 .proto 文件并生成客户端库以与您的服务的消费者共享。