Hvordan benytte eAdm api nøkler
Denne artikkelen viser kort hvordan man kan benytte et api nøkkel sett for å koble opp og utføre kall mot eAdm api. Eksempel kode er skrevet i C# / Powershell. Forutsetning for å benytte denne funksjonaliteten er at api kall er aktivert og et nøkkel sett er opprettet som har de nødvendige rettigheter for å benytte de endepunkter som kalles. Hoved URI for api kall er https://api.eadm.no/service.asmx/
Tokens varer i 8 timer, men er alltid lurt å pakke inn uthenting i en try for å håndtere utløpte tokens.
Begge eksempler utfører følgende:
Kall mot apilogin endepunkt med brukernavn og passord på api bruker for å hente ut token
Kall mot getruleset endepunkt med token angitt i pkt for uthenting av regelsett json objekt
Man kan hente ut alle tilgjengelige endepunkt og parametre ved å åpne https://api.eadm.no/service.asmx man kan også teste de fleste av de via denne siden også.
Eksempel powershell
$baseUrl = "https://api.eadm.no/service.asmx"
$username = "apiapi"
$password = Read-Host -Prompt "Enter a password"
$orgnr = "NOxxxxxxxxx"
$Url = "$($baseURL)/apilogin"
$Body = @{
orgnr = $orgnr
username = $username
password = $password
}
$response = Invoke-RestMethod -Method 'Post' -Uri $url -Body $body
if ($response.data[0]){
$token = $response.data[0]
}
else
{
Write-Host "Login failed, check audit log for id $($response.lasterror)"
}
#Fetch a ruleset with a specified ID.
$Url = "$($baseURL)/getruleset"
$Body = @{
token = $token
id = "36477"
orgnr = $orgnr
}
$response = Invoke-RestMethod -Method 'Post' -Uri $url -Body $body
$objects = $response.data
Eksempel c#
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Diagnostics;
using System.Web;
using System.Net;
using System.IO;
using System.Xml;
using System.Threading.Tasks;
using System.Collections.Specialized;
using System.Runtime.Serialization;
using System.Runtime.Serialization.Json;
[DataContract]
public class JData
{
public JData()
{
}
public JData(string queryid_, int initiatedby_)
{
queryid = queryid_;
initatedby = initiatedby_;
}
[DataMember]
public string lasterror { get; set; }
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; }
[DataMember]
public Object[] data { get; set; }
public int pagenr { 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 = "";
string UserName = "";
string Password = "";
string APIURL = "";
GetRuleSet(GetAuthToken(OrgNr, UserName, Password, APIURL), OrgNr, 40718 , APIURL));
}
public static T JsonDeserialize<T>(string jsonString)
{
DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(T));
MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(jsonString));
T obj = (T)ser.ReadObject(ms);
return obj;
}
private static string GetAuthToken(string OrgNr, string UserName, string Password, string ApiURL)
{
var responseString = "";
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);
responseString = Encoding.Default.GetString(response);
JData jresp = JsonDeserialize<JData>(responseString);
if (string.IsNullOrEmpty(jresp.lasterror))
{
return jresp.data[0].ToString();
}
}
return "";
}
public static void GetRuleSet(string Token, string OrgNr, string RuleSetId, string ApiURL)
{
var responseString = "";
string s = File.ReadAllText(FilePath);
using (var client = new WebClient())
{
var values = new NameValueCollection();
values["token"] = Token;
values["orgnr"] = OrgNr.ToUpper();
values["id"] = RuleSetId;
var response = client.UploadValues(ApiURL + @"/getruleset", values);
responseString = Encoding.Default.GetString(response);
JData jresp = JsonDeserialize<JData>(responseString);
if (!string.IsNullOrEmpty(jresp.lasterror))
{
throw new Exception("An error occurred: " + jresp.lasterror);
}
else
{
Console.WriteLine("Result OK");
Console.WriteLine(responseString);
}
}
}
}