关于弹性搜索的非常基本的问题,文档没有非常清楚地回答(因为它们似乎涉及许多高级细节但却错过了基本细节!).
示例:范围查询
http://www.elasticsearch.org/guide/reference/query-dsl/range-query.html
不告诉如何通过搜索端点来执行范围?
如果是,那么如何通过查询字符串来做到这一点?我的意思是,我想做一个GET,而不是一个POST(因为它是一个查询,而不是一个插入/修改).但是,GET请求的文档并未告诉如何在Range示例中使用JSON:
http://www.elasticsearch.org/guide/reference/api/search/uri-request.html
我错过了什么?
谢谢
REST资源版本控制的最佳实践是将版本信息放入HTTP请求的Accept/Content-Type标头中,使URI保持不变.
以下是用于检索系统信息的REST API示例请求/响应:
==>
GET /api/system-info HTTP/1.1
Accept: application/vnd.COMPANY.systeminfo-v1+json
<==
HTTP/1.1 200 OK
Content-Type: application/vnd.COMPANY.systeminfo-v1+json
{
“session-count”: 19
}
Run Code Online (Sandbox Code Playgroud)
请注意,MIME类型中指定了版本.
这是版本2的另一个请求/响应:
==>
GET /api/system-info HTTP/1.1
Accept: application/vnd.COMPANY.systeminfo-v2+json
<==
HTTP/1.1 200 OK
Content-Type: application/vnd.COMPANY.systeminfo-v2+json
{
“uptime”: 234564300,
“session-count”: 19
}
Run Code Online (Sandbox Code Playgroud)
有关更多说明和示例,请参见http://barelyenough.org/blog/tag/rest-versioning/.
是否有可能在基于Java的JAX-RS实现中轻松实现此方法,例如Jersey或Apache CXF?
目标是让几个@Resource类具有相同的@Path值,但是根据MIME类型中指定的实际版本提供请求?
我一般都研究过JAX-RS,特别是Jersey,并没有发现它的支持.泽西岛没有机会以相同的路径注册两个资源.需要实现WebApplicationImpl类的替换以支持它.
你能提出什么建议吗?
注意:需要同时提供同一资源的多个版本.新版本可能会引入不兼容的更改.
我正在编写一个服务器应用程序,并希望客户端使用body中的数据来对我的GET方法进行pararmeterize,如下所示:
# http -v GET http://localhost:3000/url text=123 foo=bar
GET /url HTTP/1.1
Accept: application/json
Accept-Encoding: gzip, deflate, compress
Content-Length: 29
Content-Type: application/json; charset=utf-8
Host: localhost:3000
User-Agent: HTTPie/0.4.0
{
"foo": "bar",
"text": "123"
}
Run Code Online (Sandbox Code Playgroud)
在AngularJS中,我试过:
var params = {
"foo": "bar",
"text": "123"
}
// no body
$http({
method: 'GET',
url: '/url',
data: params })
// ugly url
// also has its limitation: http://stackoverflow.com/questions/978061/http-get-with-request-body
$http({
method: 'GET',
url: '/url',
params: params })
// params in body, but I wanted GET
$http({
method: …
Run Code Online (Sandbox Code Playgroud) 您好我必须向网址发送获取请求
http://onemoredemo.appspot.com/group?authToken=access_token&authMethod=oauth
with request body包含json对象,如下所示.
{"goupid":"some_variable"
}
Run Code Online (Sandbox Code Playgroud)
以下是发送get请求的java代码部分:
URL url1=new URL("http://onemoredemo.appspot.com/group?authToken="+access_token+"&authMethod=oauth");
conn=(HttpURLConnection) url1.openConnection();
conn.addRequestProperty("Content-type", "application/x-www-form-urlencoded");
conn.setRequestMethod("GET");
conn.setDoOutput(true);
JSONObject jj=new JSONObject();
HttpGet get;
get.
jj.put("groupid", "testing@iritesh.com");
conn.addRequestProperty("Content-TYpe", "application/json");
conn.getOutputStream().write(jj.toString().getBytes());
conn.connect();
InputStream is=conn.getInputStream();
Run Code Online (Sandbox Code Playgroud)
我收到了一个错误java.io.FileNotFoundException
.
我发送的请求从Mozilla浏览器中,以URL
http://onemoredemo.appspot.com/group?authToken=ya29.AHES6ZRDl-RqiA8W0PhybU_hMluHrHRjlJBvq06Vze0izJq0Ovjc088&authMethod=oauth
这是给我正确的回应,但现在它的一个多小时,以便acccesstoken到期.我知道在get请求中发送参数以及requestbody但我必须发送它很奇怪.
请帮助我们如何在get请求中发送请求体中的json对象.
在 JavaScript 中使用 EventSource API 时,有没有办法将请求正文与发起轮询的 HTTP 请求一起发送?
我需要在 SSE 请求时向服务器发送大量 JSON,以便服务器可以计算要发送给客户端的事件。当我不需要它时使用网络套接字或者使用 cookie 或多个请求做奇怪的事情似乎很愚蠢。
我担心如果我将数据捆绑到查询字符串中,我会遇到查询字符串的长度限制,这可能是。
提前致谢!
好吧,我知道这是一个坏主意,不应该这样做,但为了这个问题,请假设没有其他方法 - 我得到的 API 端点需要以空对象作为主体的 GET 请求。
有没有办法从浏览器执行异步请求?我正在使用在幕后axios
使用的库, MDN说当 HTTP 方法是 时会擦除主体。我尝试使用本机,但它在浏览器中给我这个错误:
XMLHttpRequest
send
GET
fetch
TypeError: Failed to execute 'fetch' on 'Window': Request with GET/HEAD method cannot have body.
有什么办法可以做到吗?
我正在使用elasticsearch,RESTful API支持在搜索条件的GET请求中支持读取主体.
我现在正在做
response = urllib.request.urlopen(url, data).read().decode("utf-8")
Run Code Online (Sandbox Code Playgroud)
如果data
存在,则发出POST,否则发出GET.尽管我包含数据(根据POST应该在请求体中),我怎么能强制GET
Nb:我知道我可以source
在Url中使用一个属性,但我们运行的查询很复杂,查询定义非常冗长,导致查询非常长.
我实际上正在重写我们工作中的一些 API(在 ASP.Net Core 3.1 中),并尝试使它们成为 RESTFull。我遇到一些方法,应该使用 HTTP GET 调用它,因为它用于检索一些数据,但参数包装在一个相当大的 DTO 中。
所以我问自己如何应对:
我认为更好的解决方案是将 HTTP Get 与 body 一起使用(根据这篇文章https://thecodebuzz.com/http-get-delete-request-body-guidelines/这是可能的)
有人遇到同样的问题吗?现在的指导方针是什么?
谢谢你的想法
我们使用Resteasy并且在如何调用某些@GET方法时遇到问题.
如果方法的接口只有简单的参数,则没有问题.例如:
@GET
@Path("/test/{myparam}")
public FacetQueryResultImpl testMethod(@PathParam("myparam")String myparam);
Run Code Online (Sandbox Code Playgroud)
但是如果我们尝试使用POJO作为参数,似乎RestEasy无法将其序列化为查询字符串参数.例如:
@GET
@Path("/testGet")
public FacetQueryResultImpl testMethod(ParamPojo myparam);
Run Code Online (Sandbox Code Playgroud)
要么
@GET
@Path("/testGet")
public FacetQueryResultImpl testMethod(@QueryParam("myparam")ParamPojo myparam);
Run Code Online (Sandbox Code Playgroud)
(用,ParamPojo.java :)
public class ParamPojo
{
private String name;
private String description;
(...)
}
Run Code Online (Sandbox Code Playgroud)
当我们尝试这个时,有时候找不到服务,有时候我们会得到"A GET请求不能有一个身体".例外.
使用@POST我们可以使用POJO具有参数,但是我们的一些方法不会修改服务器上的任何内容,因此应该使用@GET.
解决方法是"爆炸"ParamPojo,并将其所有属性用作方法的分离参数.但这消除了"RestEasy"中的"Easy"部分,不是吗?
我有一些数据"Foo",我想从浏览器传递到服务器,并根据foo中包含的信息检索预测的统计信息.
$.ajax({
type: 'GET',
url: "/api/predictedStats/",
data: "foo=" + ko.toJSON(foo, fooProperties),
contentType: 'application/json; charset=utf-8',
dataType: 'json',
success: function(data) {
return _this.viewModel.setPredictedStats(data);
},
error: function(jqXHR, statusText, errorText) {
return _this.viewModel.setErrorValues(jqXHR, errorText);
}
});
Run Code Online (Sandbox Code Playgroud)
我创建了一个预测的统计控制器和获取Foo参数的方法.
public class PredictedStatsController : ApiController
{
public PredictedStats Get(Foo foo)
{
return statsService.GetPredictedStats(foo);
}
}
Run Code Online (Sandbox Code Playgroud)
在Get方法上粘贴断点我看到Foo对象始终为null.webapi跟踪日志记录中没有抛出任何错误,只有以下几行.
WEBAPI: opr[FormatterParameterBinding] opn[ExecuteBindingAsync] msg[Binding parameter 'foo'] status[0]
WEBAPI: opr[JsonMediaTypeFormatter] opn[ReadFromStreamAsync] msg[Type='foo', content-type='application/json; charset=utf-8'] status[0]
WEBAPI: opr[JsonMediaTypeFormatter] opn[ReadFromStreamAsync] msg[Value read='null'] status[0]
Run Code Online (Sandbox Code Playgroud)
我没有问题通过帖子将数据发送到Foo控制器以在服务器上创建Foo对象,所以我可以说json创建的客户端没有任何问题.
在fiddler中查看得到的Get看起来像以下jsondata是对象foo.
GET /api/predictedStats?foo={jsondata} HTTP/1.1
Run Code Online (Sandbox Code Playgroud)
这甚至是可能还是我认为这一切都错了?
谢谢尼尔
编辑:我觉得我几乎得到了以下工作
public PredictedStats Get([FromUri]Foo …
Run Code Online (Sandbox Code Playgroud)