Développement
Datachain met à disposition un ensemble d’API permettant d’interagir avec l’application, indépendamment de l’interface. Les appels à l’API sont soumis à la même politique de gestion de droit. Un premier appel doit être fait auprès de keycloak pour obtenir un jeton, qui sera ensuite envoyé dans les requêtes métiers.
La documentation de l’api est disponible sous deux formats :
Exemple de code d’obtention d’un jeton auprès de keycloak
import com.fasterxml.jackson.databind.JsonNode;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Un objet de configuration contient les informations nécessaires à l'authentification keycloak :
Username, password, client id and client secret
*/
public String getToken() {
try {
OkHttpClient client = new OkHttpClient().newBuilder().build();
MediaType mediaType = MediaType.parse("application/x-www-form-urlencoded");
RequestBody body =
RequestBody.create(
mediaType,
"grant_type=password&username="
+ config.getKc().getUsername()
+ "&password="
+ config.getKc().getPassword()
+ "&client_id="
+ config.getKc().getClientId()
+ "&client_secret="
+ config.getKc().getClientSecret());
Request request =
new Request.Builder()
.url(config.getKc().getUrl())
.method("POST", body)
.addHeader("Content-Type", "application/x-www-form-urlencoded")
.build();
Response response = client.newCall(request).execute();
// l'ObjectMapper ci-dessous est un objectmapper jackson
JsonNode json = ObjectMapper.getObjectMapper().readTree(response.body().bytes());
return json.get("access_token").asText();
} catch (Exception e) {
// traitement de l'exception
}
}
Exemple de code d’appel api (ici une exposition sur un Datablock)
import com.adb.hdh.api.impl.DataBlockControllerApi;
import com.adb.hdh.api.impl.DataExposeControllerApi;
import com.adb.hdh.api.impl.DataFrameControllerApi;
import com.adb.hdh.api.invoker.ApiClient;
import com.adb.hdh.api.model.DataBlock;
import com.adb.hdh.api.model.DataFrameStatus;
import com.fasterxml.jackson.databind.JsonNode;
import okhttp3.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
/** Un objet de configuration contient les informations nécessaires à l’accès à Datachain :
Url de Datachain
*/
public String callApi(String token) {
try {
ApiClient defaultClient = new ApiClient();
defaultClient.setBasePath(config.getDc().getUrl());
defaultClient.setAccessToken(json.get("access_token").asText());
// identifiant de datablock
Long datablockId = 11L;
// identifiant client (informatif)
String clientId = "API Call";
// identifiant du context
Integer ctx = 1L;
// identifiant du projet
Long project = 1L;
DataExposeControllerApi apiInstance = new DataExposeControllerApi(defaultClient);
apiInstance.exposeDatablock(datablockId, clientId, ctx, project);
} catch (Exception e) {
// traitement de l'exception
}
}