Quantcast
Channel: apiOmat » apiOmat Technologie
Viewing all articles
Browse latest Browse all 10

Nutze apiOmat mit C# und .NET

$
0
0

Eine der herausragenden Besonderheiten von apiOmat ist die Generierung eines individuellen SDKs für jedes einzelne Backend. Mit diesem SDK ist es für jeden Entwickler extrem einfach, die Nutzung seines Backends in seine Anwendung einzubinden.

Als Zielsprachen und Plattformen bieten wir derzeit Java, Objective C, JavaScript, Python, PHP und Android an. Für andere Programmiersprachen steht unsere REST API zur Verfügung. Diese bietet die gleiche Funktionalität wie die SDKs. In diesem Blogartikel zeigen wir ein Beispiel, wie die REST API in C# und .NET genutzt werden kann.

Die REST API kann mit jeder beliebigen .NET HTTP Client Library angesprochen werden. Unter Windows bei der Entwicklung mit .NET 4.5 stehen dafür die Klassen System.Net.HttpWebRequest, System.Net.WebClient, sowie System.Net.Http.HttpClient zur Verfügung. Unter Linux bei der Entwicklung mit Mono stehen ebenfalls HttpWebRequest und WebClient zur Verfügung und es gibt auch Wege, HttpClient zu nutzen. In unserem Beispiel nutzen wir HttpClient.

Hier nun das Codebeispiel für C#, in welchem über die REST Schnittstelle Daten gespeichert werden. Dies setzt voraus, dass auf der Webseite ein Account erstellt wurde, sowie im Dashboard eine App und eine Klasse mit einem String Attribut angelegt wurden.

Die genutzte REST Ressource zum Speichern von Daten ist hier in der REST API Dokumentation beschrieben.

using System;
using System.Text;
using System.Threading.Tasks;
// Add the System.Net.Http library to your references
using System.Net.Http; 
using System.Net.Http.Headers;

namespace apiomat_examples
{
    class Program
    {
        // Your account data and API key
        private static string userEmail = "user@mail.com";
        private static string userPw = "YourPassword";
        private static string apiKey = "1234567890123456789";

        private static Uri baseURL = new Uri("https://apiomat.org");
        private static string appsPath = "/yambas/rest/apps";

        // Your app, module, class and attribute name
        private static string appName = "TestApp2014";
        // The basic module is always the name of the app plus "Main"
        private static string moduleName = appName + "Main";
        private static string className = "TestClass";
        private static string attributeName = "testAttribute";

        static void Main(string[] args)
        {
            try
            {
                Uri location = CreateNewDataAsync().Result;
                if (location != null)
                {
                    Console.WriteLine(location);
                }
                else
                {
                    Console.WriteLine("Something went wrong.");
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            Console.ReadLine();
        }

        private static async Task<Uri> CreateNewDataAsync()
        {
            using (var client = new HttpClient())
            {
                // Set up the basics
                client.BaseAddress = baseURL;
                // in this example the path is "/yambas/rest/apps/TestApp2014/models/TestApp2014Main/TestClass"
                string path = appsPath + "/" + appName + "/models/" + moduleName + "/" + className;
                // Headers (auth and API key)
                client.DefaultRequestHeaders.Clear();
                client.DefaultRequestHeaders.Authorization = new AuthenticationHeaderValue("Basic", GetBase64Auth(userEmail, userPw));
                client.DefaultRequestHeaders.Add("x-apiomat-apikey", apiKey);
                // Set up the data
                string newData = "example";
                string jsonBody = "{\"@type\":\"" + moduleName + "$" + className + "\",\"" + attributeName + "\":\"" + newData + "\"}";
                StringContent content = new StringContent(jsonBody, Encoding.UTF8, "application/json");

                // Action!
                HttpResponseMessage response = await client.PostAsync(path, content);

                // Check and return
                if (response.IsSuccessStatusCode)
                {
                    return response.Headers.Location;
                }
                else
                {
                    return null;
                }
            }
        }

        private static string GetBase64Auth(string user, string pw)
        {
            byte[] plainTextBytes = System.Text.Encoding.UTF8.GetBytes(user + ":" + pw);
            return System.Convert.ToBase64String(plainTextBytes);
        }
    }
}

Erläuterungen zum Code:

In der Klasse werden zuerst einige Variablen deklariert und initialisiert. Die Accountdaten, sowie den App-, Klassen- und Attributnamen musst du an deine Daten anpassen.

Aus der Main Methode heraus wird die Methode CreateNewDataAsync() aufgerufen. Diese Methode ist asynchron, sodass du sie in dieser Form z.B. in einer Windows Store App verwenden kannst und der GUI Thread bei Aufruf dieser Methode nicht geblockt wird.
In dieser Methode wird der HttpClient erstellt, Header hinzugefügt, sowie der HTTP Body erstellt. Mit “await client.PostAsync(path, content);” wird der Request durchgeführt. Als Ergebnis wird der Wert des Location Headers der Response zurückgegeben.

Über den zurückgegebenen Wert kannst du nun auf die neu erstellte Ressource zugreifen und HTTP GET, PUT und DELETE Requests an sie schicken und so mit den Daten arbeiten.

Viel Spaß!

Möchtest du, dass wir einapiOmat SDK für C# und .NET bereitstellen? Vote hier für dieses Feature: https://apiomat.zendesk.com/entries/39315327-SDK-for-C-and-NET


Viewing all articles
Browse latest Browse all 10