Skip to main content
Hopp over innholdsfortegnelsen

Slik bruker du eADM API-nøkler

Denne artikkelen forklarer hvordan du bruker et API-nøkkelsett til å koble til og gjøre anrop mot eADM API. Kodeeksemplene er gitt i C# og PowerShell.

Forutsetninger

Før du begynner, må du forsikre deg om at:

  • API-tilgang er aktivert for organisasjonen din.

  • Det er opprettet et API-nøkkelsett med de nødvendige tillatelsene for endepunktene du planlegger å bruke.

Grunnleggende API

Basis-URI-en for alle API-kall er: https://api.eadm.no/service.asmx

Du kan se alle tilgjengelige endepunkter og de nødvendige parameterne ved å navigere til basis-URI-en i nettleseren din. Du kan også teste de fleste endepunktene direkte fra denne siden.

Merk: Autentiseringstokener er gyldige i 8 timer. Vi anbefaler å pakke inn tokenhentingsprosessen i en try-catch-blokk for å håndtere utløpte tokens på en elegant måte.

Arbeidsflyt for autentisering

Begge de følgende eksemplene viser den samme totrinnsprosessen:

  1. Ring til apilogin endepunkt med API-brukernavn og passord for å hente et autentiseringstoken.

  2. Ring til getruleset endepunkt ved hjelp av tokenet fra forrige trinn for å hente et spesifikt regelsett som et JSON-objekt.

Eksempler på kode

PowerShell-eksempel

Dette skriptet autentiserer seg mot API-et, henter et token og bruker deretter dette tokenet til å hente et bestemt regelsett.

CODE
PowerShell
CODE
$baseUrl = "https://api.eadm.no/service.asmx"
$username = "apiapi" # Your API username
$password = Read-Host -Prompt "Enter a password"
$orgnr = "NOXXXXXXXXX" # Your organization number

# 1. Authenticate and get a token
$loginUrl = "$($baseURL)/apilogin"
$loginBody = @{
    orgnr    = $orgnr
    username = $username
    password = $password
}
$loginResponse = Invoke-RestMethod -Method 'Post' -Uri $loginUrl -Body $loginBody

$token = $null
if ($loginResponse.data[0]) {
    $token = $loginResponse.data[0]
}
else {
    Write-Host "Login failed. Check the audit log for ID: $($loginResponse.lasterror)"
    return
}

# 2. Fetch a ruleset using the token
$rulesetUrl = "$($baseURL)/getruleset"
$rulesetBody = @{
    token = $token
    id    = "36477" # The ID of the ruleset to fetch
    orgnr = $orgnr
}
$rulesetResponse = Invoke-RestMethod -Method 'Post' -Uri $rulesetUrl -Body $rulesetBody

$objects = $rulesetResponse.data
# Process the $objects variable which now contains the ruleset data

C#-eksempel

Denne C#-konsollapplikasjonen demonstrerer den samme arbeidsflyten: autentisering for å få et token, og deretter bruk av tokenet til å hente et regelsett.

CODE
C#
CODE
using System;
using System.Collections.Specialized;
using System.IO;
using System.Net;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
using System.Text;

// DataContract for deserializing the JSON response
[DataContract]
public class JData
{
    [DataMember]
    public string lasterror { get; set; }

    [DataMember]
    public Object[] data { get; set; }
    
    // Other potential response fields
    public string queryid { get; set; }
    public DateTime exportstart { get; set; }
    public DateTime exportend { get; set; }
    public int initatedby { get; set; }
    public string returncode { get; set; }
    public int pagenx { get; set; }
    public int resultsprpage { get; set; }
    public int pages { get; set; }
    public int totalresults { get; set; }
    public string[] sortablecolumns { get; set; }
    public string sortedby { get; set; }
    public bool sortascending { get; set; }
    public string[] searchablecolumns { get; set; }
}

class Program
{
    static void Main(string[] args)
    {
        string orgNr = "NOXXXXXXXXX"; // Your organization number
        string userName = "api-user"; // Your API username
        string password = "your-password"; // Your API password
        string apiUrl = "https://api.eadm.no/service.asmx";
        int ruleSetIdToFetch = 40718;

        try
        {
            string authToken = GetAuthToken(orgNr, userName, password, apiUrl);
            if (!string.IsNullOrEmpty(authToken))
            {
                Console.WriteLine("Authentication successful.");
                GetRuleSet(authToken, orgNr, ruleSetIdToFetch, apiUrl);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine($"An error occurred: {ex.Message}");
        }
    }

    // Generic method to deserialize JSON
    public static T JsonDeserialize<T>(string jsonString)
    {
        var ser = new DataContractJsonSerializer(typeof(T));
        var ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
        T obj = (T)ser.ReadObject(ms);
        return obj;
    }

    // Method to get the authentication token
    private static string GetAuthToken(string orgNr, string userName, string password, string apiUrl)
    {
        using (var client = new WebClient())
        {
            var values = new NameValueCollection();
            values["orgnr"] = orgNr;
            values["username"] = userName;
            values["password"] = password;

            var response = client.UploadValues(apiUrl + @"/apilogin", values);
            var responseString = Encoding.Default.GetString(response);
            JData jresp = JsonDeserialize<JData>(responseString);

            if (string.IsNullOrEmpty(jresp.lasterror))
            {
                return jresp.data[0].ToString();
            }
            else
            {
                throw new Exception("Authentication failed: " + jresp.lasterror);
            }
        }
    }

    // Method to get a specific ruleset
    public static void GetRuleSet(string token, string orgNr, int ruleSetId, string apiUrl)
    {
        using (var client = new WebClient())
        {
            var values = new NameValueCollection();
            values["token"] = token;
            values["orgnr"] = orgNr.ToUpper();
            values["id"] = ruleSetId.ToString();

            var response = client.UploadValues(apiUrl + @"/getruleset", values);
            var responseString = Encoding.Default.GetString(response);
            JData jresp = JsonDeserialize<JData>(responseString);

            if (!string.IsNullOrEmpty(jresp.lasterror))
            {
                throw new Exception("Failed to get ruleset: " + jresp.lasterror);
            }
            else
            {
                Console.WriteLine("Result OK");
                Console.WriteLine(responseString);
            }
        }
    }
}
JavaScript-feil oppdaget

Vær oppmerksom på at disse feilene kan avhenge av nettleseroppsettet ditt.

Hvis problemet vedvarer, vennligst kontakt vår support.