对于我正在研究定义RESTful API的网站.我相信我(大多数)使用适当的资源URI并正确使用GET/POST/UPDATE/DELETE来获得它.
然而,有一点我无法弄清楚在"REST"中执行它的正确方法是什么 - 比较列表.
假设我有一个书店,顾客可以有一个愿望清单.愿望清单由书籍(其完整的书籍记录,即名称,概要等)组成,并且客户端上存在该列表的完整副本.设计RESTful API以允许客户端查询其本地心愿单的正确性(即了解在服务器端的心愿单上添加/删除了哪些书籍)的好方法是什么?
一种选择是从服务器下载完整的愿望清单并在本地进行比较.然而,这是相当多的数据(由于嵌入的内容),这是一个具有低带宽连接的移动客户端,因此这会导致很多问题.
另一种选择是不下载整个心愿单(即不包括图书信息),而只下载书籍标识符列表.这将不是太多数据(与之前的选项相比),客户端可以在本地比较列表.但是,要获得新添加的书籍的完整书籍记录,必须为每本新书进行REST调用.同样,由于这是一个网络连接不良的移动客户端,这可能会有问题.
第三个选项和我最喜欢的是,客户端将其标识符列表发送到服务器,服务器将其与心愿单进行比较,并返回删除的书籍和添加的书籍数据.这意味着单次往返并且只有必要数量的数据.由于心愿单大小估计少于100个条目,因此仅发送ID将是最小量的数据(~0.5kb).但是我不知道什么样的调用是合适的 - 它不能GET,因为我们发送数据(并将它全部放在URL中感觉不对),它不能像我们那样进行POST/UPDATE不要改变服务器上的任何东西.显然它也不是DELETE.
你会如何实现这第三个选项?
附带问题:你将如何解决这个问题(即为什么选项3愚蠢或者有什么更好的简单解决方案)?
谢谢.
PS:第四种选择是实现更复杂的协议,其中服务器跟踪列表的变化(添加/删除),并且客户端可以例如基于版本标识符或简单地时间戳查询变化.但是,我更喜欢第三种选择,因为在实现方面,它在客户端和服务器上更简单,更不容易出错.
可用内存,带宽,CPU,当然还有网络连接都有限制.但这些通常可以垂直扩展.linux上还有其他限制因素吗?没有内核修改可以克服它们吗?我怀疑,如果没有别的,限制因素将成为千兆以太网.但是对于有效的协议,它可能需要50K并发连接来淹没它.在我能够达到那么高之前别的东西会破裂吗?
我想我想要一个软件udp和/或tcp/ip负载均衡器.不幸的是,除了http协议之外,开源社区似乎并不存在类似的东西.但是使用epoll写一个并不是我的能力.我希望它会经过大量的调整才能使其扩展,但这是可以逐步完成的工作,而且我会成为更好的程序员.
从 plist 中提取的数据会显示在模拟器中但不会显示在我的测试设备上,是否有任何原因?我花了一整天的时间让它工作,直到我在实际设备上测试它时我才感到兴奋。奇怪的。
谢谢。
我正在尝试在C中为Unix创建一个简单的shell.我已经能够完成所有命令和执行的解析,但是我遇到了管道问题.我认为问题是我没有连接到正确的管道输入第二个命令.
例如,如果我键入"ls | wc",它将在"wc"命令后暂停,我认为这是因为它等待输入.我认为问题是当我使用dup2(读取[i],0),并且它没有挂钩到正确的管道时.
我知道这是一个广泛的问题,但如果有任何指示我可以得到,我会很感激.这是创建新进程并尝试管道它们的代码.
int fileds[2];
int reading[num_cmds];
int writing[num_cmds];
int p;
for(p=0; p < num_cmds; p++)
{
reading[p] = -1;
writing[p] = -1;
}
int j;
for(j=0; j < num_cmds-1; j++) //Create pipes for commands
{
int fileds[2];
pipe(fileds);
reading[j+1] = fileds[0];
writing[j] = fileds[1];
}
int i = 0;
for(i = 0; i < num_cmds;i++)
{
cmd_args = parse_cmd(cmds[i],output_file,input_file,&run_bg); //Get command and args
pid_t childpid;
int status;
childpid=fork();
if (childpid >= 0)
{
if (childpid == 0) …Run Code Online (Sandbox Code Playgroud) 我有一系列像这样的房子,
{
"homes" : [{
"home_id" : "1",
"address" : "321 Main St",
"city" : "Dallas",
"state" : "TX",
"zip" : "75201",
"price" : "925",
"sqft" : "1100",
"year_built" : "2008",
"account_type_id" : "2",
"num_of_beds" : "2",
"num_of_baths" : "2.0",
"geolat" : "32.779625",
"geolng" : "-96.786064",
"photo_id" : "14",
"photo_url_dir" : "\/home_photos\/thumbnail\/2009\/06\/10\/"
}],
..........
}
Run Code Online (Sandbox Code Playgroud)
我想提供3种不同的搜索方法.
如何返回此家庭区域数组的子集:
priceX和Y之间bathrooms> = Zbedrooms= = A或== B或== C.例如,我如何创建psuedo代码,如:
homes.filter {price >= 150000, price <= 400000, …Run Code Online (Sandbox Code Playgroud) 我正在为eclipse开发一个插件.在这个插件中,我需要能够在文本编辑器中的上下文菜单中添加一个项目.到目前为止,我一直没有成功,有没有人知道如何添加这个项目.
另外,如何获取当前在编辑器中选择的文本的字符串.
非常感谢.
是否有任何简单的方法按降序对数组进行排序,就像它们在Arrays类中按升序排序一样?
或者我必须停止懒惰并自己这样做:[
一切都很好,最后一个问题很烦人。编译很棒,但是链接失败:
bash-3.2$ make
g++ -Wall -c -g Myworld.cc
g++ -Wall -g solvePlanningProblem.o Position.o AStarNode.o PRM.o PRMNode.o World.o SingleCircleWorld.o Myworld.o RECTANGLE.o CIRCLE.o -o solvePlanningProblem
**Undefined symbols:
"vtable for Obstacle", referenced from:
Obstacle::Obstacle()in Myworld.o
"typeinfo for Obstacle", referenced from:
typeinfo for RECTANGLEin RECTANGLE.o
typeinfo for CIRCLEin CIRCLE.o
ld: symbol(s) not found
collect2: ld returned 1 exit status
make: *** [solvePlanningProblem] Error 1**
Run Code Online (Sandbox Code Playgroud)
障碍物
#ifndef Obstacle_hh
#define Obstacle_hh
#include <vector>
#include <iostream>
class Obstacle{
public:
Obstacle(){}
virtual bool collidesWith(double x,double y);
virtual void …Run Code Online (Sandbox Code Playgroud) 我正在为一个游戏的排名页面工作,我希望首先按胜利排序,然后按损失排序(如果人们拥有相同数量的胜利).以下查询正常工作,以便按顺序列出一个列表,但我不知道如何将损失放入此查询中.
SELECT username, COUNT(id) AS wins
FROM tblBattleHistory
WHERE battle_type = '0' && outcome = '1'
GROUP BY username
ORDER BY wins DESC
Run Code Online (Sandbox Code Playgroud)
结果='1'表示他们赢了,所以当结果='0'时,那意味着他们输了.
我正在尝试将字符串转换为double.代码很简单.
double first, second;
first=atof(str_quan.c_str());
second=atof(extra[i+1].c_str());
cout<<first<<" "<<second<<endl;
quantity=first/second;
Run Code Online (Sandbox Code Playgroud)
当试图转换额外的时候,编译器会向我抛出这个智慧的宝石:
错误:在extra.std中请求成员c_str :: basic_string <_CharT,_ Traits,_Alloc> :: operator [] [with _CharT = char,_Traits = std :: char_traits,_Alloc = std :: allocator](((unsigned int )(i + 1))),它是非类型char
我不知道这意味着什么.如果我输出额外的[i + 1],我得到3.如果我将额外的字符串作为字符串,程序会尝试将第一个(2)除以51(ascii为3).到底他妈发生了什么?