<< Haga clic para mostrar la tabla de contenido >> Ejemplo de código con C# para usar OData |
Introducción
El siguiente ejemplo muestra cómo puede crear un código en C# para invocar métodos OData desde un sistema externo. Aunque existen diferentes lenguajes de programación desde donde puede invocar OData, este ejemplo muestra los pasos de codificación que debe cumplir.
Qué necesita hacer
Recuerde que OData se basa en el protocolo OAuth 2.0. Primero debe registrar la aplicación externa en el Portal de Trabajo para obtener las llaves. Ver Guía de inicio.
Recomendamos utilizar las credenciales de cliente de tipo Grant y asegúrese de seleccionar la API en el scope. Luego, debe comenzar a codificar. Los pasos de codificación para invocar un método OData son los siguientes:
1. Obtener el token OAuth 2.0.
2. Ejecute el método. Dependiendo del método, debe establecer una invocación GET o POST.
Obtener el token de autorización
El primer paso es obtener un token de acceso OAuth 2.0. Recomendamos crear una clase para crear un constructor con el token de acceso, para que sea más fácil de serializar y manipular.
Clase con una respuesta OAuth
public class OAuthResponse{
private string tokenType;
private string accessToken;
public string TokenType{
get{return tokenType;}
}
public string AccessToken{
get{return accessToken;}
}
public OAuthResponse(string result){
JObject resultObject = JObject.Parse(result);
accessToken = resultObject["access_token"].ToString();
tokenType = resultObject["token_type"].ToString();
}
}
Cree un método para obtener el token de acceso
Ahora necesita crear un método para obtener el token de acceso. Tenga en cuenta que este método tiene tres entradas:
•uri: URL de su proyecto Bizagi, p.ej: http://[Servidor]/[Proyecto]
•ClientId: Llave Client ID de OAuth 2.0 generada desde el Portal de Trabajo de Bizagi. Ver Guía de inicio.
•ClientSecret: Llave Client Secret de OAuth 2.0 generada desde el Portal de Trabajo de Bizagi. Ver Guía de inicio.
public static OAuthResponse AcquireRequestToken(string uri, string clientId, string clientSecret){
//Set the OAuth keys formated in BASE64
string authorization = Authorization(clientId, clientSecret);
//Get the token
HttpWebRequest request = CreateRequest(uri + "/oauth2/server/token", authorization, "application/x-www-form-urlencoded", "POST");
SetMethodPost("grant_type=client_credentials&scope=api", request);
var response = (System.Net.HttpWebResponse)request.GetResponse();{
using (var reader = new System.IO.StreamReader(response.GetResponseStream())){
return new OAuthResponse(reader.ReadToEnd());
}
}
}
También necesita el siguiente método que formatea las llaves de OAuth en BASE64 como lo esperaba Bizagi:
private static string Authorization(string clientId, string clientSecret){
string concatenateKeys = clientId + ":" + clientSecret;
var plainTextBytes = Encoding.UTF8.GetBytes(concatenateKeys);
return "Basic " + Convert.ToBase64String(plainTextBytes);
}
El siguiente paso en el código es invocar el método OData.
Después de obtener el token del método anterior, debe ejecutar el servicio Bizagi OData. Hemos creado otro método llamado ExecuteMethod con las siguientes entradas:
•uri: URL del método ODATA dentro de su proyecto Bizagi, p.ej, http://[Servidor]/[Proyecto]/odata/data/processes. Puede consultar nuestro índice de servicios para ver nuestros métodos OData.
•token: token obtenido en el método AcquireRequestToken. Tenga en cuenta que esto se declara como un objeto OAuthResponse.
•method: El método HTTP, configúrelo como GET.
public static void ExecuteMethod(string uri, OAuthResponse token, string method){
var request = CreateRequest(uri, token.TokenType + " " + token.AccessToken, "application/json", method);
var response = (System.Net.HttpWebResponse)request.GetResponse();
var reader = new System.IO.StreamReader(response.GetResponseStream());
//Service response
JObject resultObject = JObject.Parse(reader.ReadToEnd());
}
Este método establece encabezados HTTP para la invocación:
private static HttpWebRequest CreateRequest(string uri, string authorization, string contentType, string method){
var request = (HttpWebRequest)WebRequest.Create(uri);
request.Headers.Add("Authorization", authorization);
request.Headers.Add("Content-Type", contentType);
request.Method = method;
return request;
}
Después de obtener el token, debe ejecutar el servicio Bizagi OData. Hemos creado otro método llamado ExecuteMethod con las siguientes entradas:
•uri: URL del método ODATA dentro de su proyecto Bizagi Proyecto Bizagi, p.ej: http://[Servidor]/[Proyecto]/odata/searches(fde242da-qaadr23).
•token: token obtenido en el método AcquireRequestToken. Tenga en cuenta que esto se declara como un objeto OAuthResponse.
•method: El método HTTP, configúrelo como POST.
•startParameters: Esta es una entrada de tipo JSON string enviada como el cuerpo del mensaje. La estructura del JSON depende del método. Puede consultar nuestro índice de servicios para ver nuestros métodos OData.
public static void ExecuteMethod(string uri, OAuthResponse token, string method, string startParameters = null){
var request = CreateRequest(uri, token.TokenType + " " + token.AccessToken, "application/json", method);
if (method == "post"){
//This sets the body of the requests using the JSON string
SetMethodPost(startParameters, request);
}
var response = (System.Net.HttpWebResponse)request.GetResponse();
var reader = new System.IO.StreamReader(response.GetResponseStream());
//Service response
JObject resultObject = JObject.Parse(reader.ReadToEnd());
}
El siguiente método establece el cuerpo de la solicitud HTTP para una invocación POST:
private static void SetMethodPost(string startParameters, HttpWebRequest request){
byte[] body = Encoding.UTF8.GetBytes(startParameters);
request.ContentLength = body.Length;
request.GetRequestStream().Write(body, 0, body.Length);
}