当前位置: 首页 > 知识库问答 >
问题:

什么时候使用。原型RPC或REST

公孙茂学
2023-03-14

我主要在工作中处理REST json API。所以我很熟悉它们。但对于我自己的项目,我正在尝试应用引擎,因为我相信它非常适合。

我已经开始用python(使用ferris)编写我的逻辑,在阅读更多关于应用引擎的文章时,我遇到了proorpc和云endpoint。但在我读过的大多数示例中,它们的作用似乎与我在rest api中所做的一样。使用json发出请求,然后得到json响应。或者一个错误。

我看到的主要区别是,在rest中,endpoint基于资源。以及围绕它们的HTTP动词,如GET、POST、PUT、DELETE等。在RPC中,每个请求都有自己的endpoint,而不是基于资源或模型。

两者都是通过json请求和响应的。所以我认为我没有看到使用谷歌endpoint的好处。他们会提供其他好处吗?我可能会看到更好的endpoint跟踪分析。但我是否仍然需要使用post http动词来修改内容?

如果我使用某些框架,这些会有什么变化吗?就像django。虽然我目前正在测试Ferris,它有一个处理protorpc的消息传递系统。尽管如此,我还是无法Rest。

那么我错过了什么?与让我的对象方法处理json请求相比,endpoint有什么好处。套接字连接是否会发挥作用?

共有1个答案

卜勇
2023-03-14

您可以通过使用endpoint来创建RESTful API来完成这两项工作。

protorpc不会神奇地使API恢复RESTful。您必须使API在使用protorpc的endpoint框架内保持RESTful。

使用endpoint的好处是,您可以轻松完成许多身份验证工作(假设您要使用Google帐户),序列化/反序列化可以为您完成,您的客户端库可以为您生成,并且可以支持的不仅仅是Javascript客户端。如果这些听起来不错,那么endpoint可能适合您。如果这些东西不适用,那么您可以更直接地使用RequestHandlers。

我能够使用endpoint创建一个简单的API。它有三个主要资源:记录、数据集和移动。记录对象是最小的数据单位。数据集对象是一组记录。移动对象表示数据集更改位置的事件。我的RESTful URI如下所示:

GET  /records       # Get list of records
GET  /records/<id>  # Get single record
POST /records       # Create records

GET  /datasets      # Get list of datasets
GET  /datasets/<id> # Get single dataset
POST /datasets      # Create dataset

GET  /moves         # Get list of moves
GET  /moves/<id>    # Get single move
POST /moves         # Create move

有了它,我可以创建数据、组织数据并四处移动。我能够在App-Engine的endpoint框架中完全做到这一点,它是RESTful的。

 类似资料:
  • 问题内容: 我想知道我什么时候应该在Spring中准确使用范围?我了解,如果需要Bean,则返回相同的对象实例。 那我们为什么要考虑呢? 通过示例进行解释将有助于您理解其必要性。 问题答案: 要明确简单的定义: 原型范围=每次注入/查找新对象时都会创建一个。每次都会使用new 。 单例范围=每次注入/查找相同对象时,都会返回该对象。在这里它将实例化一个实例,然后每次返回它。 原型bean是在使用时

  • 问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制

  • 问题内容: 使用弱引用是我从未见过的实现方式,因此,我试图弄清楚它们的用例是什么以及实现将如何工作。你何时需要使用WeakHashMap或WeakReference以及如何使用它? 问题答案: 强引用的一个问题是缓存,尤其是对于非常大的结构(如图像)而言。假设你有一个必须处理用户提供的图像的应用程序,例如我正在使用的网站设计工具。自然地,你想缓存这些图像,因为从磁盘加载它们非常昂贵,并且你希望避免

  • 问题内容: 我有一个将客户发送到另一个站点来处理付款的应用程序。客户之外的另一个站点在我们的服务器上调用一个页面,让我们知道付款的状态。被调用页面会检查付款应用程序提供的参数,并检查我们是否知道该交易。然后,它更新数据库以反映状态。这一切都无需与客户进行任何互动即可完成。 我个人选择将此功能实现为JSP,因为将文件拖放到文件系统中比编译和打包文件然后将条目添加到配置文件中要容易得多。 考虑到页面的

  • 问题内容: 我怎么能说: 为什么函数调用中不需要括号,而最后一行呢? 问题答案: 是一个功能 调用该函数并产生该函数返回的任何值。 setTimeout的目的是在一段时间后运行代码。你需要的功能只是传递给它(这样的setTimeout可以自称在适当的时候函数),因为如果你将它传递给setTimeout的前调用的函数(用括号),将执行 现在 而不是1秒后,。

  • 一般来说,当发现 CPU 的占用率和实际业务应该出现的占用率不相符,或者对 Nginx worker 的资源使用率(CPU,内存,磁盘 IO )出现怀疑的情况下,都可以使用火焰图进行抓取。另外,对 CPU 占用率低、吐吞量低的情况也可以使用火焰图的方式排查程序中是否有阻塞调用导致整个架构的吞吐量低下。 常用的火焰图有三种: lj-lua-stacks.sxx 用于绘制 Lua 代码的火焰图 sam