我们都知道通过REST删除单个项目的"标准"方法是向URI发送单个DELETE请求example.com/Items/666.盛大,让我们马上删除很多.因为我们不需要原子删除(或真正的交易,即全部或全部),我们可以告诉客户"运气不好,提出许多请求",但这不是很好.因此,我们需要一种方法来允许客户端请求立即删除许多"项目".
根据我的理解,这个问题的"典型"解决方案是"两步"方法.首先,客户端POST一个项目ID列表,并返回一个URI,如example.com/Items/Collection/1.创建该集合后,它们会调用DELETE.
现在,我看到这很好用,除了我,这是一个糟糕的解决方案.首先,您强制客户端发出两个容纳服务器的请求.其次,'我以为DELETE应该删除一个Item?',不应该在这个URI上调用DELETE有效地取消事务(虽然它不是真正的事务),我们怎么会取消它?真的会更好,如果有某种形式的"执行"的行动,但我不能捣乱是很大.它还强制服务器必须考虑'POSTed的JSON看起来更像是修改这些Item的请求,但请求是DELETE ...所以我想我会删除它们'.这种方法也开始在客户端/服务器上强加一种状态,而不是我承认的真实状态,但它有点像.
在我看来,更好的解决方案是简单地调用DELETE example.com/Items(或者可能example.com/Items/Collection暗示这是多次删除)并传递包含您要删除的ID列表的JSON数据.据我所知,这基本上解决了第一种方法的所有问题.它更容易用作客户端,减少服务器必须完成的工作,真正无状态,更具语义性.
我真的很感激这方面的反馈,我错过了一些关于REST的东西,这使得我对这个问题的解决方案不切实际吗?我还希望链接到文章,特别是如果他们比较这两种方法; 我知道这通常不被批准用于SO.我需要能够反驳说只有第一种方法才是真正的RESTfull,证明第二种方法是可行的解决方案.当然,如果我正在咆哮错误的树,请告诉我.
我正在使用'tail -f'来跟踪日志文件,因为它已更新; 接下来,我将其输出传递给grep,以仅显示包含搜索词的行(在本例中为"org.springframework"); 最后我想把输出从grep传递到第三个命令'cut':
tail -f logfile | grep org.springframework | cut -c 25-
Run Code Online (Sandbox Code Playgroud)
如果可以从grep获取输入, cut命令将删除每行的前25个字符!(如果我从链中消除'grep',它会按预期工作.)
我正在使用cygwin和bash.
实际结果:当我添加第二个管道以连接到'cut'命令时,结果是它挂起,好像它在等待输入(如果你想知道).
($DAO->get_num_rows() == 1) ? echo("is") : echo("are");
Run Code Online (Sandbox Code Playgroud)
这个剂似乎对我不起作用,我得到一个错误"意外的T_ECHO".我期待它回应'是'或'是'.
我试过没有条件周围的括号.我不能以这种方式使用三元运算符吗?
该$DAO->get_num_rows()返回的整数值.
我想为我的Kotlin代码编写单元测试并使用junit/hamcrest匹配器,我想使用该is方法,但它是Kotlin中的保留字.
如何编译以下内容?
class testExample{
@Test fun example(){
assertThat(1, is(equalTo(1))
}
}
Run Code Online (Sandbox Code Playgroud)
目前我的IDE,InteliJ强调,作为一个编译错误,说它期待一个)后is?
我正在尝试使用带有正则表达式模式的egrep来匹配空格.
我之前使用过PerEx和C#的RegEx,它们都支持\s搜索空格的模式.egrep(或至少我正在使用的版本)似乎不支持这种模式.
在网上的一些文章中,我遇到了一个简写[[:space:]],但这似乎不起作用.任何帮助表示赞赏.
使用:SunOS 5.10
我有一个客户端应用程序,它从用户的浏览器作为Java小程序运行,并通过给定的端口连接到服务器.服务器在可公开访问的云上运行.根据我之前编写套接字代码的经验,我可以决定一个随机端口号(比如5999)并将其用于客户端服务器通信.但是,在这种情况下,客户端可以是任何用户计算机,并且可以有许多用户访问服务器.
所以问题是如何确保我使用最不可能被客户端计算机上的任何其他服务使用的端口号.
我也为此目的探索了基于Web服务的协议,但我没有使用它,因为我的要求非常简单,可以通过简单的套接字通信和自定义协议来实现.我觉得webservices工具和像SOAP,CORBA这样的东西太重了.
我有一个可以在URI处访问的资源,/resources/{resource_identifier}它有一个我想要访问的"status"属性.我想到了一些选择,这将是"最好的"或"最RESTfull"?
选项一将操作附加到URI并让客户端POST访问这些URI
/resources/{resource_identifier}/void
/resources/{resource_identifier}/open
/resources/{resource_identifier}/close
Run Code Online (Sandbox Code Playgroud)
这看起来很笨拙.
选项二在URI中使用查询参数并将客户端PATCH用于这些参数
/resources/{resource_identifier}?transition=void
/resources/{resource_identifier}?transition=open
/resources/{resource_identifier}?transition=close
Run Code Online (Sandbox Code Playgroud)
选项三使用请求的有效负载并拥有客户端PUT
/resources/{resource_identifier}
Run Code Online (Sandbox Code Playgroud)
负载选项:
{ ..., "status" :"void" }
{ ..., "status" :"open" }
{ ..., "status" :"close" }
Run Code Online (Sandbox Code Playgroud)
或者可能还有别的东西?
我熟悉Ruby On Rails的路由系统,以及Code Igniter和PhpCake如何路由东西,但是除了拥有一个基于目录结构提供路由的集中位置之外,还有更多内容吗?像这样
controller/action/id/
Admin/editUser/22
Run Code Online (Sandbox Code Playgroud) Rails带有开箱即用的RESTful资源,但您是否将它们用于实际的公共API?如果是这样,您将如何完成API的版本控制,即example.com/api/v2/foo/bar?
如果您尝试读取'get'变量的值,如果未在URL中设置所述变量会发生什么.示例:您请求页面test.php,在该文件中它尝试读取值$_GET['message'].在这种情况下会发生什么?剂量值刚刚返回为''?
这是否意味着,如果我总是期望输入一个值,并且我不愿意接受''我可以做类似的事情的价值
$foo = $_GET['bar'];
if($foo == ''){
// Handle my 'error'
}
else
{
// $foo should now have a value that I can work with
}
Run Code Online (Sandbox Code Playgroud)
请记住,我知道我可以使用isset($_GET['bar'])但是我不只是想知道它是否已经设置,我不在乎是否它,我只关心它是否有一个不仅仅是一个空的值串.