我需要调用一个不需要用户输入的进程,只需要一个触发器.我计划在没有正文的情况下使用POST/uri来触发进程.我想知道从HTTP和REST角度来看这是否被认为是坏的?
在我尝试使用REST架构风格重新设计现有应用程序时,我遇到了一个问题,我想将其称为"Mediatype Explosion".但是,我不确定这是否真的是REST的问题或固有的好处.要解释我的意思,请参考以下示例
我们的应用程序的一小部分看起来像:
收集-collections-的 - >集合-的-物品─>项
即顶级是集合的集合,这些集合中的每一个都是项目的集合.
此外,每个项目都有8个属性,可以单独读取和写入.尝试将上述层次结构公开为RESTful资源会让我看到以下媒体类型:
application/vnd.mycompany.collection-of-collections+xml
application/vnd.mycompany.collection-of-items+xml
application/vnd.mycompany.item+xml
Run Code Online (Sandbox Code Playgroud)
此外,由于每个项目具有8个可以单独读取和写入的属性,因此将产生另外8种媒体类型.例如,项目的"值"属性的一种这样的媒体类型将是:
application/vnd.mycompany.item_value+xml
Run Code Online (Sandbox Code Playgroud)
正如我之前提到的,这只是我们应用程序的一小部分,我希望有几个不同的集合和项目需要以这种方式公开.
我的问题是:
我也知道上面的设计是高度精细的,特别是暴露项目的各个属性,并为每个属性分别设置媒体类型.然而,使其粗糙意味着我将最终通过线路传输不必要的数据,而实际上客户端只需要读取或写入项目的单个属性.你会如何处理这样的设计问题?
根据HTTP规范:
如果在源服务器上创建了资源,则响应应该是201(已创建)并包含描述请求状态的实体,并引用新资源和Location头(请参阅第14.30节).
这是否意味着POST请求应始终在Location标头中发送重定向URI而没有响应主体?
我正在尝试设计一个"物品集合"资源.我需要支持以下操作:
这就是我已经走了:
创建集合:
==>
POST /service
Host: www.myserver.com
Content-Type: application/xml
<collection name="items">
<item href="item1"/>
<item href="item2"/>
<item href="item3"/>
</collection>
<==
201 Created
Location: http://myserver.com/service/items
Content-Type: application/xml
...
Run Code Online (Sandbox Code Playgroud)
删除集合:
==>
DELETE /service/items
<==
200 OK
Run Code Online (Sandbox Code Playgroud)
从集合中删除单个项目:
==>
DELETE /service/items/item1
<==
200 OK
Run Code Online (Sandbox Code Playgroud)
但是,我发现支持其他操作有点棘手,即我可以使用哪些方法:
我试图了解TCP/IP和HTTP超时值之间的关系.这两个超时值是不同还是相同?大多数Web服务器允许用户通过某些配置设置HTTP Keep Alive超时值.Web服务器如何使用此值?这个值是否只是在底层的TCP/IP套接字上设置,即HTTP Keep Alive超时和TCP/IP保持活动超时相同?或者他们的待遇不同?
我的理解是(可能不正确):Web服务器使用底层TCP套接字上的默认超时(即无限期),无论配置的HTTP Keep Alive超时如何,都会创建一个计算器线程,该线程将指定的HTTP超时间隔倒计时.当Worker线程达到零时,它会关闭连接.
编辑: 我的问题是关于两个超时持续时间之间的关系或差异,即当HTTP保持活动超时持续时间和Web服务器使用的套接字(SO_TIMEOUT)上的超时不同时会发生什么?我是否应该担心这两个是否相同?
据说,在一个定义良好的RESTful系统中,客户端只需要知道根URI或几个众所周知的URI,客户端就应该通过这些初始URI发现所有其他链接.我确实理解这种方法的好处(解耦客户端),但对我来说,缺点是客户端需要在每次尝试访问时发现链接,即给定以下资源层次结构:
/collection1
collection1
|-sub1
|-sub1sub1
|-sub1sub1sub1
|-sub1sub1sub1sub1
|-sub1sub2
|-sub2
|-sub2sub1
|-sub2sub2
|-sub3
|-sub3sub1
|-sub3sub2
Run Code Online (Sandbox Code Playgroud)
如果我们遵循" 客户端只需要知道根URI "的方法,那么客户端应该只知道上面的根URI即/ collection1,并且客户端应该通过超媒体链接发现其余的URI.我发现这很麻烦,因为每次客户端需要进行GET时,比如sub1sub1sub1sub1,如果客户端首先对/ collection1执行GET并在返回的表示中定义跟随链接,然后在子资源上执行几次GET以达到想要的资源?或者我对连通性的理解是完全错误的?
最好的问候,Suresh
是否有任何工具或机制可以帮助验证CA颁发的SSL证书,然后再将其安装到目标Web服务器上?
我们计划将纯天然网络应用程序部署到两个独立的数据中心(一个位于西欧,另一个位于东南亚),纯粹是出于性能原因.我们允许用户上传文件,这意味着我们需要保持两个数据中心的blob存储同步.我知道Azure提供了对同步结构化数据的支持,但似乎没有对blob同步的支持.我的问题是:
是否有一种服务可以在不同的数据中心之间提供blob同步?如果没有,我该如何实施呢?我在Web上看到很多样本在Azure blob存储和本地文件系统之间同步,反之亦然,但在数据中心之间没有.
MEF(Managed Extensibility Framework)和Eclipse平台之间有什么共同点和不同点?我觉得MEF与Eclipse非常相似,添加了DI.
你的意见?
从Python中的函数返回不同数量的返回值可以吗?如果是,调用方应如何处理返回值?例如
def func():
if(condition_1):
return 1,2
if(condition_2):
return 1
if(condition_3):
return 1,2,3,4
Run Code Online (Sandbox Code Playgroud)
注意: condition_1,condition_2和condition_3在函数func中是本地的,因此调用者不知道将返回多少值。
我有一个程序从文件中读取内容并将其打印在屏幕上.但程序打印每隔一行,即跳过其他所有行.包InputOutput;
import java.io.*;
public class CharacterFileReaderAndFileWriter{
private BufferedReader br = null;
private PrintWriter pw = new PrintWriter(System.out, true);
/* Read from file and print to console */
public void readFromFile() throws IOException{
try{
br = new BufferedReader(new FileReader("E:\\Programming\\Class files\\practice\\src\\InputOutput\\test.txt"));
}
catch(FileNotFoundException ex){
ex.printStackTrace();
}
String s = null;
do{
s = br.readLine();
pw.println(s);
}
while((s = br.readLine())!=null);
br.close();
}
/* Main method */
public static void main(String[] args) throws IOException{
CharacterFileReaderAndFileWriter cfr = new CharacterFileReaderAndFileWriter();
cfr.readFromFile();
}
}
Run Code Online (Sandbox Code Playgroud)