小编Pat*_*ele的帖子

REST:使用一个请求更新多个资源 - 是标准还是要避免?

一个简单的REST API:

  • GET:items/{id} - 返回具有给定id的项的描述
  • PUT:items/{id} - 更新或创建具有给定id的项目
  • DELETE:items/{id} - 删除具有给定id的项目

现在有问题的API扩展:

  • GET:items?filter - 返回与过滤器匹配的所有项ID
  • PUT:items - 更新或创建JSON有效内容描述的一组项目
  • [[ DELETE:items - 删除JSON有效负载描述的项目列表 ]] < - 不正确

我现在对DELETE和PUT操作回收功能感兴趣,可以通过PUT/DELETE项目/ {id}轻松访问.

问题:提供这样的API是否常见?

替代方案:在单一连接的时代发出多个请求的多个请求很便宜,并且由于更改成功或失败,但是在NOSQL数据库时代,即使请求处理已经消失,列表中的更改也可能已经发生,因此会更加原子化内部服务器或任何由于任何原因.

[UPDATE]

在考虑了白宫Web标准维基百科:REST示例之后,现在使用以下示例API:

一个简单的REST API:

  • GET:items/{id} - 返回具有给定id的项的描述
  • PUT:items/{id} - 更新或创建具有给定id的项目
  • DELETE:items/{id} - 删除具有给定id的项目

最佳资源API:

  • GET:items?filter - 返回与过滤器匹配的所有项ID
  • POST:items - 根据JSON有效内容的描述更新或创建一组项目

不支持和禁止PUT和DELETE on/items.

使用POST似乎可以成为在封闭资源中创建新项目而不替换但附加的技巧.

HTTP语义POST读取:

通过追加操作扩展数据库

PUT方法需要替换完整集合以返回HTTP语义PUT引用的等效表示:

给定表示的成功PUT将表明对该相同目标资源的后续GET将导致在200(OK)响应中返回等效表示.

[UPDATE2]

对于多个对象的更新方面似乎更加一致的替代方案似乎是PATCH方法.PUT和PATCH之间的区别在RFC 5789草案中描述为:

PUT和PATCH请求之间的差异反映在服务器处理封闭实体以修改Request-URI标识的资源的方式中.在PUT请求中,封闭的实体被认为是存储在源服务器上的资源的修改版本,并且客户端正在请求替换所存储的版本.但是,对于PATCH,随附的实体包含一组指令,这些指令描述了如何修改当前驻留在源服务器上的资源以生成新版本.PATCH方法影响Request-URI标识的资源,它也可能对其他资源产生副作用; 即,可以通过应用PATCH来创建新资源,或者修改现有资源.

因此,与POST相比,PATCH也可能是一个更好的主意,因为PATCH允许UPDATE,因为POST只允许添加意味着添加而没有修改机会的东西.

所以POST在这里似乎是错误的,我们需要将我们提出的API更改为:

一个简单的REST API:

  • GET:items/{id} - 返回具有给定id的项的描述
  • PUT:items/{id} - …

rest json

62
推荐指数
2
解决办法
4万
查看次数

Reactjs-setState以前的状态是第一个参数,props是第二个参数

我在这篇官方文章中读过以下这些文章:

this.props并且this.state可以异步更新,您不应该依赖它们的值来计算下一个状态.

任何人都可以通过举例说明以下代码试图实现的内容.

 this.setState((prevState, props) => ({
  couter: prevState.counter + props.increment
}));
Run Code Online (Sandbox Code Playgroud)

我指的是reactjs React.js的官方网站

javascript setstate reactjs

10
推荐指数
3
解决办法
9641
查看次数

使用带有Require.js的knockout.simpleGrid.3.0.js

我正在网站上使用require.js和淘汰赛,并希望使用此链接中的simpleGrid示例http://knockoutjs.com/examples/grid.html但是我不能将kncokout.simpleGrid.3.0.js包含在Require中.

我试过包装插件

define(['jQuery', 'knockout'], // Require knockout
    function($, ko) {

   });
Run Code Online (Sandbox Code Playgroud)

这似乎不起作用似乎模板发生问题.

任何帮助赞赏

javascript requirejs knockout.js

6
推荐指数
1
解决办法
873
查看次数

通过 ByInclusionOnly 过滤事件

我遇到过这样的情况:某些日志事件包含较大的属性值(在这种特殊情况下,是一个大的 XML 数据包)。我想使用 Serilog 的ByIncludingOnly功能为这些大数据事件使用额外的接收器。这是我认为可行的示例:

    private static void FilteredLogging()
    {
        Log.Logger = new LoggerConfiguration()
            .WriteTo.Console(new RawFormatter())
            .WriteTo.Logger(lc => lc.Filter.ByIncludingOnly(LargeDataPackets))
                .WriteTo.File("big.txt")
            .CreateLogger();

        Log.Information("go");
        Log.ForContext("data", "12345").Information("Small packet");
        Log.ForContext("data", "1234567890987654321").Information("Big packet");

        Log.CloseAndFlush();
    }

    private static bool LargeDataPackets(LogEvent le)
    {
        return le.Properties.ContainsKey("data") &&
               le.Properties["data"].ToString().Length > 10;
    }
Run Code Online (Sandbox Code Playgroud)

但是,当我运行此代码时,所有三个消息都会转到“big.txt”文件。我预计只有最后一项(“大数据包”)会进入文件,因为它是属性data超过 10 个字符的唯一事件。

我正在使用 Serilog 2.0。

serilog

5
推荐指数
1
解决办法
5747
查看次数

如何更改 vue-google-maps 中的标记图标

我是 vuejs 的新手。我正在使用vue-google-maps来显示标记,我想知道如何更改标记图标。我试图将图标添加到标记标签,但它不起作用。在我的代码下面:

在我的模板中,我有:

<marker :position.sync="m.position" :icon.sync="m.icon" v-for="m in markers"></marker>
Run Code Online (Sandbox Code Playgroud)

这是我的脚本:

export default {
 data: function data() {
  return {
   center: { lat: 33.533818415851705, lng: -3.746186887500016 },
   zoom: 7,
   markers: [{position: { lat: 34.263, lng: -6.582 }, icon:"../assets/marker-icon.png"}]
   };}};
Run Code Online (Sandbox Code Playgroud)

有人可以指导我吗?

javascript vue.js vue-component

4
推荐指数
1
解决办法
1万
查看次数

Moq - 测试控制器方法是否抛出异常

我有一个控制器方法,如果循环通过id列表找不到指定的id,则抛出自定义异常,否则返回局部视图.

我已经完成了测试,看看它是否成功返回部分视图但是如何测试该方法是否失败以及是否抛出了自定义异常?

unit-testing moq

2
推荐指数
1
解决办法
3405
查看次数