[
https://issues.apache.org/jira/browse/QUARKS-96?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15276924#comment-15276924
]
ASF GitHub Bot commented on QUARKS-96:
--------------------------------------
Github user dlaboss commented on a diff in the pull request:
https://github.com/apache/incubator-quarks/pull/106#discussion_r62562952
--- Diff:
connectors/http/src/main/java/quarks/connectors/http/HttpStreams.java ---
@@ -38,12 +40,88 @@ Licensed to the Apache Software Foundation (ASF) under
one
*/
public class HttpStreams {
+ /**
+ * Make an HTTP GET request with JsonObject. <br>
+ *
+ * Method specifically works with JsonObjects. For each JsonObject in
the stream,
+ * HTTP GET request is executed on provided uri. As a result, Response
is added to
+ * the response TStream.
+ * <br>
+ *
+ * Sample usage:<br>
+ *
+ * <pre>
+ * {@code
+ * JsonObject request1 = new JsonObject();
+ * request1.addProperty("a", "abc");
+ * request1.addProperty("b", "42");
+ * TStream<JsonObject> rc = HttpStreams.getJson(
+ * topology.collection(Arrays.asList(request1)),
+ * HttpClients::noAuthentication,
+ * t -> url + "a=" + t.get("a").getAsString() + "&b="
+ * + t.get("b").getAsString());
+ * }
+ * </pre>
+ * <br>
+ * See <i>HttpTest</i> for example.
+ * <br>
+ * @param stream - JsonObject TStream.
+ * @param clientCreator - CloseableHttpClient supplier preferably
created using {@link HttpClients}
+ * @param uri - URI function which returns URI string
+ * @return TStream of JsonObject which contains responses of GET
requests
+ *
+ * @see HttpStreams#requests(TStream, Supplier, Function, Function,
BiFunction)
+ */
public static TStream<JsonObject> getJson(TStream<JsonObject> stream,
Supplier<CloseableHttpClient> clientCreator,
Function<JsonObject,String> uri) {
return HttpStreams.<JsonObject,JsonObject>requests(stream,
clientCreator,
- t -> HttpGet.METHOD_NAME, uri, HttpResponders.json());
+ t -> HttpGet.METHOD_NAME, uri, HttpResponders.json());
+ }
+
+ /**
+ * Make an HTTP POST request with JsonObject. <br>
+ *
+ * Method specifically works with JsonObjects. For each JsonObject in
the stream,
+ * HTTP POST request is executed on provided uri. Request body is
filled using
+ * HttpEntity provided by body function. As a result, Response is
added to
+ * the response TStream.<br>
+ *
+ * Sample usage:<br>
+ *
+ * <pre>
+ * {@code
+ * JsonObject request = new JsonObject();
+ * request.addProperty("a", "abc");
+ * request.addProperty("b", "42");
+ * TStream<JsonObject> rc = HttpStreams.postJson(
+ * topology.collection(Arrays.asList(request1)),
+ * HttpClients::noAuthentication,
+ * t -> url,
+ * t -> new ByteArrayEntity(request1.toString().getBytes())
+ * );
+ * }
+ * </pre>
+ * <br>
+ * See HttpTest for example.
+ * <br>
+ * @param stream - JsonObject TStream.
+ * @param clientCreator - CloseableHttpClient supplier preferably
created using {@link HttpClients}
+ * @param uri - URI function which returns URI string
+ * @param body - Function that returns HttpEntity which will be set as
a body for the request.
+ * @return TStream of JsonObject which contains responses of GET
requests
+ *
+ * @see HttpStreams#requestsWithBody(TStream, Supplier, Function,
Function, Function, BiFunction)
+ */
+ public static TStream<JsonObject> postJson(TStream<JsonObject> stream,
+ Supplier<CloseableHttpClient> clientCreator,
+ Function<JsonObject, String> uri,
+ Function<JsonObject, HttpEntity> body) {
--- End diff --
It strikes me that the ``body`` function should instead be
``UnaryOperator<JsonObject>`` (a fn that yields a JsonObject (body) from the
input JsonObject tuple). I think that's more in line with "keeping the simple
simple" for applications exchanging Json-based data. I agree that
``HttpEntity`` is appropriate for ``requestsWithBody()``. Does that make sense?
> Add an HTTP POST utility method.
> --------------------------------
>
> Key: QUARKS-96
> URL: https://issues.apache.org/jira/browse/QUARKS-96
> Project: Quarks
> Issue Type: Improvement
> Components: Connectors
> Reporter: Daniel John Debrunner
> Assignee: Dale LaBossiere
> Labels: newbie
>
> HTTPStreams.requests can support any type of request but it would be useful
> to have a utility method for POST requests, similar to getJson - i.e., a
> postJson()
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)