小编Mar*_*ten的帖子

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万
查看次数

JDK 8中的高级代码热插拔?

我在JavaVM中寻找更好的HotSwapping.能够仅应用方法体改变是可以的,但是非常有限.

可用选项是JRebel和一个名为动态代码演进虚拟机(DCEVM)的已停产项目.

有一个由DCEVM的核心开发人员编写的JEP 159.2011年的博客文章提到,DCEVM的开发人员现在可以使用Oracle将其集成到JDK中.

我们是否已经对JDK 8 beta有这种支持,还是推迟到JDK 9?

我需要热插拔来添加和删除以及重命名私有方法.这会有很多帮助.有没有一个产品允许我这样做(在JRebel旁边,公关活动让我感到不安).

最后支持的DCEVM版本是1.6u24,它只提供32位Linux二进制文件.由于我使用的是1.7和64位Linux,这对我来说都是一个显示器.

github上还有另一个名为Fakereplace的项目.这可以很容易地用于我的目的,还是我不应该调查这个?

java jvm-hotspot hotswap

26
推荐指数
2
解决办法
8553
查看次数

编程时元素,项目和条目之间的区别?

命名变量非常重要,并且作为一个非母语的英语使用者我想知道使用元素,项和条目来命名数据结构或变量/参数中的内容会有什么不同.

naming

20
推荐指数
1
解决办法
3650
查看次数

Java 8:具有可变参数的Lambda

我正在寻找一种方法来调用多个参数方法,但使用一个lambda构造.在文档中,据说lambda只有在它可以映射到功能界面时才可用.

我想做的事情如下:

test((arg0, arg1) -> me.call(arg0, arg1));
test((arg0, arg1, arg2) -> me.call(arg0, arg1, arg2));
...
Run Code Online (Sandbox Code Playgroud)

有没有什么方法可以优雅地做到这一点而不定义10个接口,每个参数计数一个?

更新

我使用从非方法接口扩展的多个接口,并重载该方法.

两个参数的示例:

interface Invoker {}
interface Invoker2 extends Invoker { void invoke(Object arg0, Object arg1);}
void test(Invoker2 invoker, Object ... arguments) {
    test((Invoker)invoker, Object ... arguments);
}

void test(Invoker invoker, Object ... arguments) {
    //Use Reflection or whatever to access the provided invoker
}
Run Code Online (Sandbox Code Playgroud)

我希望有可能用一个解决方案替换10个调用者接口和10个重载方法.

我有一个合理的用例,请不要问诸如"你为什么要做这样的事情?"之类的问题.并且'你想解决的问题是什么?' 或类似的东西.只要知道我已经考虑过这一点,这是我试图解决的合法问题.

很抱歉添加混淆调用它调用程序,但它实际上是在我当前的用例(测试构造函数合同)中调用它.

基本上,如上所述,考虑一个在其中使用不同数量的属性的方法lambda.

java lambda java-8

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

确保模块仅在Guice中加载一次

必须处理Guice,我想知道我应该如何处理模块方面的依赖关系.

在Guice中,每个模块都由一个实例提供.因此,如果我有一个需要某个服务的模块,它会创建一个模块,为该服务添加一个绑定并安装它(binder.install(module)).

现在我有两个独立的模块,完全可以独立使用,并且都安装相同的数据库模块.

独立使用这两个模块没有问题,但如果两个模块在同一个应用程序中使用会发生什么?数据库模块将由两个模块独立加载,但不能正确.

有没有办法询问活页夹是否某种类型已经绑定?我无法使用getProvider来检查它,因为所有返回的都是LookupProvider,无论是否已经绑定了什么.

那么如何处理这种情况呢?

更新:

它接缝Guice无法提供以下功能:

  1. 检查给定模块是否已加载.
  2. 检查给定的类是否已绑定.
  3. 使用配置中的提供程序可以执行分布式配置(模块能够配置要提供的对象).

java guice

10
推荐指数
1
解决办法
4964
查看次数

JVM的内存占用量是多少?如何最小化它?

我只是想知道当一个人开始产生JVM的多个进程时,JavaVM(Sun,Linux)的实际占用空间是什么.当我记得那些应该分享rt.jar(也许超越?).那些JVM是否共享JIT缓存(所有JVM功能都是相同的Classpath)?

有什么办法可以减少多实例JVM的开销吗?(除了设置较小的堆限制)?

编程应用程序时我能做些什么?

我可以共享内存区域吗?也许共享映射的内存块?

java memory jvm memory-footprint

9
推荐指数
2
解决办法
9715
查看次数

为 Flutter Web 应用程序添加 id 或 name 属性或其他标识方式?

在编写 Flutter Web 应用程序时,我尝试利用基于 Selenium 的 Web-UI-Testing 框架。遗憾的是,我无法通过 id 或 name 属性识别代表某个 flutter 小部件的 HTML 元素。HTML 文档中不存在小部件键。

我设法使用文本小部件内容来查找小部件的文本部分,并且可以找到其代表包含文本的小部件的父元素,但这对于图像、画布等失败了。

是否有任何机制可以用来将 id/name(或任何其他识别方式)添加到 HTML 标签汤中?

使用 JavaScript,有没有办法遍历内部逻辑小部件树并从那里得出表示 HTML 元素的结论(例如,通过其位置和大小)?

html javascript selenium flutter flutter-web

9
推荐指数
1
解决办法
2757
查看次数

在内存中运行Docker?

据我所知,Docker使用内存映射文件从图像开始.因为我可以一遍又一遍地做到这一点,并且据我记得并行启动同一图像的不同实例,我想docker抽象文件系统并将更改存储在其他地方.

我想知道docker是否可以配置(或默认情况下)在没有某种临时文件的情况下以仅内存模式运行?

docker

8
推荐指数
1
解决办法
5654
查看次数

Windows NTFS 和区分大小写

根据维基百科, NTFS 允许使用不同大小写的两个相似名称(如 Readme.txt 与 readme.txt),并且只能由 windows 文件 API 阻止。

当前的 Windows 文件系统,如 NTFS,区分大小写;即 readme.txt 和 Readme.txt 可以存在于同一目录中。但是,Windows 应用程序中用于文件访问的 API 不区分大小写,这使得从应用程序的角度来看文件名不区分大小写。因此,应用程序只能访问文件名只是大小写不同的文件之一,如果提供的文件名不明确,某些命令可能会失败

来自 Linux,我问自己这两个文件存在的可能性是什么,并且一个人只能访问其中一个文件,这使其成为安全的理想问题。“Windows API”是什么意思。还有其他方法可以访问那些重复的文件吗?可以直接使用磁盘驱动程序(格式化驱动程序)访问文件系统吗?

windows filesystems ntfs

8
推荐指数
2
解决办法
7920
查看次数

海湾合作委员会的订购保证

我碰巧挖掘C并锁定自由编程.摆弄它我想知道gcc能给我一个保证程序执行的方式与我写下来完全相同的方式,并且在某个步骤中没有执行寄存器优化并且其顺序中没有改变操作.

正如我目前所理解的那样,它保证了内存操作以完全相同的顺序发生,并且方法调用以及它们自身和内存操作以相同的顺序发生.在重新排序之间可能会发生.

可以使用volatile关键字关闭寄存器优化.

是否有任何其他保证或角落案件C,尤其是gcc暗示的?

c gcc

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