Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
RESTWeb服务,仅用于数据库访问?_Rest_Post_Get_Service - Fatal编程技术网

RESTWeb服务,仅用于数据库访问?

RESTWeb服务,仅用于数据库访问?,rest,post,get,service,Rest,Post,Get,Service,我一直在阅读RESTWeb服务,并希望实现自己的REST服务 我在互联网上看到的所有例子都与数据库访问有关。但我想要实现的与访问数据库无关 我想创建一个REST服务,它允许将一个大字符串和各种其他参数传递到一个资源中,并返回一个xml结果集。不会在数据库中创建或更新任何内容,也不会从数据库中检索任何内容。它将数据传递给一个复杂的处理过程,然后返回结果 我的问题在于我用什么动词 我觉得我应该使用GET动词来与最佳实践保持一致,但有时查询可能非常大,将其传递到querystring是切实可行的 这让

我一直在阅读RESTWeb服务,并希望实现自己的REST服务

我在互联网上看到的所有例子都与数据库访问有关。但我想要实现的与访问数据库无关

我想创建一个REST服务,它允许将一个大字符串和各种其他参数传递到一个资源中,并返回一个xml结果集。不会在数据库中创建或更新任何内容,也不会从数据库中检索任何内容。它将数据传递给一个复杂的处理过程,然后返回结果

我的问题在于我用什么动词

我觉得我应该使用GET动词来与最佳实践保持一致,但有时查询可能非常大,将其传递到querystring是切实可行的

这让我不得不发帖了。这似乎符合我想要实现的目标,但我认为它再次脱离了REST最佳实践

REST是否仅在希望与数据库交互时使用

我应该放弃使用rest的想法,创建一个SOAP服务吗


更新我的REST服务是分析文章并返回给定文章的关键字报告。鉴于此,那么资源是“关键字”,对此的帖子将返回完整的报告。我当时正在考虑第二个uri的关键字/推荐,一个帖子将返回一些推荐的关键短语提交的文章。这是否符合其他要求?

您可以对最佳实践的内容稍加保留。我不确定是否有人真的关心POST是否影响数据库,只要它正确地执行您记录的任何操作


只要你的用户知道你会有什么样的行为,你就会没事。

我会坚持使用REST,如果你真的有,就使用POST方法。没有REST不仅仅适用于数据库。然而,它应该是非常简单的使用没有肥皂的污垢。SOAP尝试执行的许多任务(如身份验证)都可以通过直接http完成。其理念是REST轻便、反应灵敏、易于理解和使用。剩下的我会形容为和一位老阿姨的谈话,她总是忘记你是谁。当您查询REST应用程序时,可能需要将其分解为名词和动词,例如,对人员资源或地点资源的查询,而不是同时尝试查询地点和人员,将这两种资源拆分并向每个资源询问您的查询。这样做确实会让协议变得很健谈,但是如果您真的关心网络流量,那么我会选择XML-RPC或SOAP

记住,与SOAP、XML-RPC等类似,REST只描述接口,而不是提供该接口的应用程序的实现。没有理由认为REST应该只在CRUD数据库场景中使用

我将使用以下方法解决您的问题:


让客户机通过POST发送数据,并将POST参数、大字符串和各种其他参数发送到通用URI e。Ghttp://example.com/processor 并返回结果资源e的URI。Ghttp://example.com/results/. 客户端现在可以从那里获得复杂处理过程的结果。

如果事实REST与数据库无关,则REST不需要数据库

您描述的场景正是POST的意图。引用最新版本的:

POST方法用于请求 源服务器是否接受 请求书中的陈述 作为目标要处理的数据 资源,资源

你可以这样做:

POST /ArticleProcessor
Content-Type: text/plain
发送您的文章文本,回复可能是:

Status: 200 OK
Content-Type:application/xhtml

<html>
<title>Results of keyword processing</title>
<body>
<a rel="FullReport" href="/reports/2343434/full">Full Report</a>
<a rel="TopKeywords" href="/reports/2343434/top">Top Keywords</a>
</body>
</html>

更改协议的含义将失去互操作性。对于HTTP,可以缓存GET检索的数据。使用带有GET to retrieve data语义的POST会减少缓存数据的可能性。好吧,那太好了,你能给我举一个REST服务的例子吗,它不涉及数据库?Martin,在我的例子中,缓存数据不会是一个问题,它不会影响我试图实现的“服务”。但正如您所说,使用POST从本质上获取结果集可能是错误的做法?您能否更明确地说明您的应用程序设计,例如,您如何将应用程序分解为动词和名词。您应该使用GET,因为GET允许缓存,听起来,系统的相同输入总是会产生相同的响应。该协议确实非常适合db应用程序,但这是因为db会自动为您描述其资源。例如,一张桌子可以称为人。因此,这些方法在一个简单描述的实体上所做的事情显然比在一堆实体上所做的事情要明显。我认为,如果您的查询字符串变得太大,请重新考虑您的应用程序,首先查看数据使用情况和描述。可能是设计问题,现在
您已经阐明了您实际想要实现的目标,使用PUT方法,一篇文章是一种新的资源,因此您正在将它放入您的应用程序中。您的应用程序从未处理过此资源,因此您不应该使用POST。由于它是一个新资源,您不能使用GET查询它,因为应用程序不知道您在说什么。@WeNeedAnswers-您不认为Darrel Miller根据HTTP规范给出的关于POST定义的答案是正确的方法吗。PUT用于更新已存在或应用程序已知的资源。在我的情况下,web服务将不知道它需要处理的文章的任何信息。谢谢,我的服务是分析文章并返回给定文章的关键字报告。鉴于此,那么资源是“关键字”,对此的帖子将返回完整的报告。我当时正在考虑第二个关键字uri/recommended,以返回提交文章的一些推荐关键短语。这符合REST吗?资源不是文章吗?查询将针对这篇文章资源,想想两者之间的关系,一篇文章可以有许多关键字。例如,,,将以缩写形式返回所有文章的列表,而返回的文章应该只有一个:完全包含与之相关的所有关键字和数据。我将进一步说明这个示例,要查询具有特定关键字的文章,您可以继续说someplace.com/articles?keywords=1、2、3、4,五、六、七、八等。然后可以围绕此完成您设计的所有其他属性,例如,Full=No,MaxReturn=400etc@WeNeedAnswers-我不认为我的资源是“文章”,你是对的,一篇文章可以有很多关键词。但我的服务不存储文章,它接收已发布的文章并对其进行处理以返回关键字。例如,如果我想要一个对文章数据库进行互访问的服务,并希望对其运行查询,那么您的示例是正确的。如果您发布一篇新文章,您应该使用PUT方法。返回可以作为包含内容关键字的HTTP数据包返回。我喜欢这个想法,但现在我们进入了状态领域。我认为REST服务应该是无状态的。将结果集存储在db中以便调用GET检索结果可能是完全符合REST体系结构的唯一方法。在我看来,这对于我想要实现的目标来说似乎是昂贵的@Stuart通过给状态一个URI,您正在将状态变成一个资源状态。这是允许休息的。您是将其存储在物理磁盘上还是将其保存在内存中完全取决于您。@Stuart,这个答案对您有何帮助?我很想知道,除非我误读了这个问题:@WeNeedAnswers-我在你的回答中添加了一条评论现在这是我遗漏的,为什么在所有其他的互联网帖子中,他们说帖子是为了创建或添加……这不是对帖子的正确定义。@Stuart,因为其中一个定义就是这样做的。不幸的是,RFC2616强调了这一点,人们在第一段就停止了阅读。IETF httpbis工作组正在编制的最新规范已不再强调防止混淆的特定用法。您的回答将帮助很多人,因为POST的定义已立即明确。文章不仅仅是为了添加或创建资源,这只是非感官的!如果我周末读到的网站能更新那里的内容就好了!这需要在所有REST爱好者中传播开来。Thanks@Stuart我认为这是过去几年一群非常聪明的人花时间重新编写HTTP规范以使其更清晰的原因之一。不过你说得对,web上关于REST的错误信息比好信息多