Adding new methods for Http Client (#60)

* Adding new methods for Http Client

* Finishing implementation for HttpClient

* Adding JavaDoc and Changing return Type to new Methods

* Using ObjectSerializer and changing Constants values
This commit is contained in:
mestizoLopez 2019-12-28 18:52:49 -06:00 committed by Artur Souza
parent 0ef261554a
commit ee1af6cb1c
9 changed files with 172 additions and 17 deletions

View File

@ -63,4 +63,22 @@ public final class Constants {
* String format for Actors timer registration relative url..
*/
public static String ACTOR_TIMER_RELATIVE_URL_FORMAT = ACTORS_BASE_URL + "/%s/%s/reminders/%s";
/**
* Invoke Publish Path
*/
public static String PUBLISH_PATH = API_VERSION + "/publish";
/**
* Invoke Binding Path
*/
public static String BINDING_PATH = API_VERSION + "/binding";
/**
* State Path
*/
public static String STATE_PATH = API_VERSION + "/state";
}

View File

@ -4,7 +4,7 @@
*/
package io.dapr.actors.client;
import io.dapr.actors.*;
import io.dapr.client.AbstractClientBuilder;
import okhttp3.OkHttpClient;
/**

View File

@ -5,13 +5,14 @@
package io.dapr.actors.client;
import io.dapr.actors.*;
import io.dapr.client.AbstractDaprHttpClient;
import okhttp3.*;
import reactor.core.publisher.Mono;
/**
* Http client to call actors methods.
*/
class ActorProxyHttpAsyncClient extends AbstractDaprClient implements ActorProxyAsyncClient {
class ActorProxyHttpAsyncClient extends AbstractDaprHttpClient implements ActorProxyAsyncClient {
/**
* Creates a new instance of {@link ActorProxyHttpAsyncClient}.

View File

@ -4,7 +4,7 @@
*/
package io.dapr.actors.runtime;
import io.dapr.actors.AbstractClientBuilder;
import io.dapr.client.AbstractClientBuilder;
import okhttp3.OkHttpClient;
/**

View File

@ -4,15 +4,32 @@
*/
package io.dapr.actors.runtime;
import io.dapr.actors.AbstractDaprClient;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import io.dapr.actors.utils.ObjectSerializer;
import io.dapr.client.AbstractDaprHttpClient;
import io.dapr.actors.Constants;
import io.dapr.exceptions.DaprException;
import okhttp3.OkHttpClient;
import reactor.core.publisher.Mono;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
/**
* Http client to call Dapr's API for actors.
*/
class AppToDaprHttpAsyncClient extends AbstractDaprClient implements AppToDaprAsyncClient {
//public class DaprHttpAsyncClient implements DaprAsyncClient {
class AppToDaprHttpAsyncClient extends AbstractDaprHttpClient implements AppToDaprAsyncClient {
/**
* ObjectMapper to Serialize data
*/
private static final ObjectSerializer MAPPER = new ObjectSerializer();
private Map<String,String> dataMap;
/**
* Creates a new instance of {@link AppToDaprHttpAsyncClient}.
@ -77,4 +94,118 @@ class AppToDaprHttpAsyncClient extends AbstractDaprClient implements AppToDaprAs
String url = String.format(Constants.ACTOR_TIMER_RELATIVE_URL_FORMAT, actorType, actorId, timerName);
return super.invokeAPIVoid("DELETE", url, null);
}
/**
* Creating publishEvent for Http Client
*
* @param topic HTTP method.
* @param data url as String.
* @param method JSON payload or null.
* @return Mono<String>
*/
public Mono<String> publishEvent(String topic, String data, String method) throws Exception {
if (topic.isEmpty() || topic == null ) {
throw new DaprException("500" , "Topic cannot be null or empty.");
}
if ( method.isEmpty() || method == null ) {
throw new DaprException("500", "Method cannot be null or empty.");
}
String url = method.equals("POST") ? Constants.PUBLISH_PATH : Constants.PUBLISH_PATH + "/" + topic;
dataMap = new HashMap();
dataMap.put(topic,data);
String jsonResult = MAPPER.serialize(dataMap);
return super.invokeAPI(method, url, jsonResult);
}
/**
* Creating invokeBinding Method for Http Client
*
* @param name HTTP method.
* @param data url as String.
* @param method JSON payload or null.
* @return Mono<String>
*/
public Mono<String> invokeBinding(String name, String data, String method) throws Exception {
if (name.isEmpty() || name == null) {
throw new DaprException("500", "Name cannot be null or empty.");
}
if (method.isEmpty() || method == null) {
throw new DaprException("500","Method cannot be null or empty.");
}
String url = method.equals("POST") ? Constants.BINDING_PATH : Constants.BINDING_PATH + "/" + name;
dataMap = new HashMap();
dataMap.put(name,data);
String jsonResult = MAPPER.serialize(dataMap);
return super.invokeAPI(method, url, jsonResult);
}
/**
* Creating invokeBinding Method for Http Client
*
* @param key HTTP method.
* @return Mono<String>
*/
public Mono<String> getState(String key) throws DaprException {
if (key.isEmpty() || key == null) {
throw new DaprException("500", "Name cannot be null or empty.");
}
String url = Constants.STATE_PATH + "/" + key;
return super.invokeAPI("GET", url, null);
}
/**
* Creating invokeBinding Method for Http Client
*
* @param key HTTP method.
* @param data HTTP method.
* @return Mono<String>
*/
public Mono<String> saveState(String key, String data) throws Exception {
if (key.isEmpty() || key == null) {
throw new DaprException("500", "Name cannot be null or empty.");
}
String url = Constants.STATE_PATH;
dataMap = new HashMap();
dataMap.put(key,data);
String jsonResult = MAPPER.serialize(dataMap);
return super.invokeAPI("POST", url, jsonResult);
}
/**
* Creating invokeBinding Method for Http Client
*
* @param key HTTP method.
* @return Mono<String>
*/
public Mono<String> deleteState(String key) throws DaprException {
if (key.isEmpty() || key == null) {
throw new DaprException("500", "Name cannot be null or empty.");
}
String url = Constants.STATE_PATH + "/" + key;
return super.invokeAPI("DELETE", url, null);
}
}

View File

@ -2,7 +2,9 @@
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*/
package io.dapr.actors;
package io.dapr.client;
import io.dapr.actors.Constants;
/**
* Base class for client builders

View File

@ -2,17 +2,20 @@
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*/
package io.dapr.actors;
package io.dapr.client;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
import java.net.URL;
import java.util.UUID;
import io.dapr.actors.Constants;
import io.dapr.exceptions.DaprError;
import io.dapr.exceptions.DaprException;
import okhttp3.*;
import reactor.core.publisher.Mono;
// base class of hierarchy
public abstract class AbstractDaprClient {
public abstract class AbstractDaprHttpClient {
/**
* Defines the standard application/json type for HTTP calls in Dapr.
@ -40,12 +43,12 @@ public abstract class AbstractDaprClient {
private final OkHttpClient httpClient;
/**
* Creates a new instance of {@link AbstractDaprClient}.
* Creates a new instance of {@link AbstractDaprHttpClient}.
*
* @param port Port for calling Dapr. (e.g. 3500)
* @param httpClient RestClient used for all API calls in this new instance.
*/
public AbstractDaprClient(int port, OkHttpClient httpClient) {
public AbstractDaprHttpClient(int port, OkHttpClient httpClient) {
this.baseUrl = String.format("http://%s:%d/", Constants.DEFAULT_HOSTNAME, port);;
this.httpClient = httpClient;
}

View File

@ -2,12 +2,12 @@
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*/
package io.dapr.actors;
package io.dapr.exceptions;
/**
* Represents an error message from Dapr.
*/
class DaprError {
public class DaprError {
/**
* Error code.

View File

@ -2,7 +2,7 @@
* Copyright (c) Microsoft Corporation.
* Licensed under the MIT License.
*/
package io.dapr.actors;
package io.dapr.exceptions;
import java.io.IOException;
@ -21,7 +21,7 @@ public class DaprException extends IOException {
*
* @param daprError Server-side error.
*/
DaprException(DaprError daprError) {
public DaprException(DaprError daprError) {
this(daprError.getErrorCode(), daprError.getMessage());
}
@ -31,7 +31,7 @@ public class DaprException extends IOException {
* @param errorCode Client-side error code.
* @param message Client-side error message.
*/
DaprException(String errorCode, String message) {
public DaprException(String errorCode, String message) {
super(String.format("%s: %s", errorCode, message));
this.errorCode = errorCode;
}