[ 
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)

Reply via email to