我有一些我正在写的Web服务,我想尽可能地保持RESTful.我使用在IIS/ASP.NET/SharePoint中运行的HTTPHandler来托管这些Web服务.
我的大多数服务都期望HTTP GET.我有两个只是返回一些数据(即查询)并将是幂等的,但参数可能有点复杂.它们都可以包括服务参数中的字符,这些字符至少不允许URL的PATH部分.
使用IIS,ASP.NET和SharePoint我发现URL路径中的以下字符甚至没有进入我的HttpHandler,即使Url编码(请求爆炸,我对此没有任何简单的控制) :
(%3E)
以下字符使其成为我的HttpHandler,但即使Url编码,UriTemplate也无法正确处理它们:
所以,我有点彻底,但我需要在查询字符串中测试这些url编码的字符.看起来这在大多数情况下都会起作用.
在我的一个服务中,作为参数的特殊字符在语义上是查询/过滤器的一部分(实际上是搜索服务的搜索项),但在另一个中它们实际上不是查询/过滤器的一部分,所以理想情况下它们是路径而不是查询字符串.
我的问题是,最好的选择是什么?以下是我所知道的一些内容:
使用HTTP GET和查询字符串. 任何可能使用特殊字符的内容都应该在查询字符串和Url Encoded上. 这是我倾向于的地方,但我担心极长的查询字符串(IE有2083限制)
在路径中使用HTTP GET和base64编码.对于可能使用特殊字符的任何参数, 请使用Modified Base64 for URL,并将其作为路径的一部分(如果需要). 我试过这个并且它有效,但它有点难看.关于极长查询字符串的问题仍然存在.
使用HTTP POST和邮件正文. 任何可能使用特殊字符的东西都应该在请求的正文中. 似乎是一个不错的解决方案,但帖子被理解为不被幂和(我认为)通常意味着更改(而没有变化发生在这里).
使用HTTP GET和邮件正文. 任何可能使用特殊字符的东西都应该在请求的正文中.根据SO,这似乎是一个坏主意:请求正文和Roy Fielding的HTTP GET.
根据请求的大小,使用#3和#1或#2的组合.
其他???
请注意,在某些情况下,我可以更改周围的东西以防止特殊字符(我可能会这样做),但我无法在所有情况下都这样做.
关于URI长度,RFC2616 Sec3.2.1说明如下:
HTTP协议不对URI的长度设置任何先验限制.服务器必须能够处理它们所服务的任何资源的URI,并且如果它们提供可以生成这种URI的基于GET的表单,它应该能够处理无限长度的URI.如果URI长于服务器可以处理的长度,服务器应该返回414(Request-URI Too Long)状态(参见10.4.15节).
Note: Servers ought to be cautious about depending on …Run Code Online (Sandbox Code Playgroud) 我过去的几个ajax应用程序都使用了GET请求,但现在我开始使用POST请求了.POST请求似乎稍微更安全,绝对更友好/漂亮.因此,我想知道为什么我应该使用GET请求.
以前版本的Internet Explorer在超过2,083个字符的Web地址上出现错误(请参阅http://support.microsoft.com/kb/208427).同时,Firefox,Opera和Safari可以处理至少80,000个.
版本9带来了许多改进.URL长度是其中之一吗?
我要求在Web服务调用中将一些值从移动设备传递到服务器,因此我打算以JSON格式传递所有值,如下所示
{
"nameservice": [
{
"id": 7413,
"name": "ask"
},
{
"id": 7414,
"name": "josn"
},
{
"id": 7415,
"name": "john"
},
{
"id": 7418,
"name": "R&R"
}
]
}
Run Code Online (Sandbox Code Playgroud)
以下是我的服务电话
@RequestMapping("/saveName")
@ResponseBody
public String saveName(String acc)
{jsonObject = new JSONObject();
try
{
);
System.out.println(acc);
jsonObject.accumulate("result", "saved ");
}
catch(Exception e)
{
e.printStackTrace();jsonObject.accumulate("result", "Error Occured ");
}
return jsonObject.toString();
}
Run Code Online (Sandbox Code Playgroud)
我试图通过这种方式调用上述服务
localhost:8080/service/saveName?acc={ "nameservice": [ { "id": 7413, "name": "ask" }, { "id": 7414, "name": "josn" }, { "id": 7415, "name": …Run Code Online (Sandbox Code Playgroud) 根据标题,在将自定义URL方案与应用程序一起使用时,URL的最大长度是多少?
例如,如果我通过URL启动另一个应用程序,并使用类似的东西传递一个数据blob
myappscheme://一些/路径数据= 0123456789ABCDEF
在URL被切断之前该字符串可以获得多长时间(或者系统拒绝启动其他应用程序)?
如何在提交后清除表单中的信息,以便在页面刷新后不显示此错误?
查看图片(来自chrome):

该对话框包含以下文字:
您要查找的页面使用
了您输入的信息.返回该
页面可能会导致您
重复执行任何操作.你想继续吗?
我希望这个对话框不会出现.
我刚刚编译了以下代码
public class A {
public static void main(String... args) {
int i = 3;
++i;
++i;
++i;
++i;
++i;
++i;
++i;
++i;
// repeat writing the expression ++i for 20,000 times
System.out.println(i);
}
}
Run Code Online (Sandbox Code Playgroud)
并收到以下错误消息
方法main(String ...)的代码超过65535字节限制
为什么Java实现此限制?我没有看到理性,因为Java确实包含了goto_w指令.
我有153个标记,需要用它们生成一个静态地图,但是当把它们放在网址中时,我得到一个如下错误:
414 Request-Uri Too Large
Run Code Online (Sandbox Code Playgroud)
我的网址是这样的
"http://maps.google.com/maps/api/staticmap?center=13.00,-85.00&size=600x500&maptype=roadmap&markers=13.305,-86.18636&markers=13.72326,-86.13705&......"
Run Code Online (Sandbox Code Playgroud)
谢谢大家!
javascript django google-maps google-maps-api-3 google-maps-static-api
在Java中,是否有一种在urls和windows文件名之间进行转换的标准/好方法?
我正在尝试下载文件,但我希望Windows文件名可以转换回原始文件名.请注意,网址的查询部分至关重要,因为我将下载仅在查询中有所不同的不同页面.
我目前的hacky解决方案是用特定字符串(例如'QQ')替换非法字符(例如'?'),但这会使转换回url的透明度降低.有没有更好的办法?
我正在使用ember-data构建一个EmberJS应用程序.
我的应用程序中的某些功能需要非常复杂的查询.
举个例子,假设我有三个实体 - 学生,老师和班级.如果我想得到1993年之前出生的所有在X老师上课的学生的名单,我怎么能用RESTful api做到这一点?在简单的SQL中,它很容易,但我不确定在我的API中实现它的最佳实践.
我是否需要与基本的REST API一起构建自定义端点?
所以我仍然有:
GET /students (which returns all the students)
GET /students/{id} (which returns a specific student)
etc
Run Code Online (Sandbox Code Playgroud)
但是为我的"自定义"查询实现以下内容:
GET /students/custom/born_before/{date}/taught_by/{teacher_id}
Run Code Online (Sandbox Code Playgroud)
或者有更标准化的方法吗?
java ×3
http ×2
javascript ×2
rest ×2
url ×2
ajax ×1
api ×1
codeigniter ×1
custom-url ×1
django ×1
ember-data ×1
file ×1
get ×1
google-maps ×1
http-get ×1
http-post ×1
ios ×1
jquery ×1
json ×1
php ×1
protocols ×1
spring ×1
uritemplate ×1
web-services ×1
windows ×1