Smartsite WebAPI

Smartsite 8.0 - ...
 

Vanaf Smartsite 8.0 is de Smartsite WebAPI (Web Application Programming Interface) beschikbaar, waarmee door programmeurs van applicaties diverse acties vanuit externe programma's in Smartsite kunnen worden aangeroepen. 
De API werkt op basis van XML berichten (geen JSON).

Met deze API kun je vanuit externe programma's onder andere items toevoegen, bewerken en verwijderen. Op dit moment kun je hiermee vooral voorzien in het aanmaken en bijwerken van content items in Smartsite vanuit externe applicaties. Op de roadmap voor volgende versies staan uitbreidingen op deze API, zoals bijvoorbeeld het toevoegen en wijzigen van gebruikersgegevens.

Beveiliging

De WebAPI is niet zomaar toegankelijk voor iedereen en kent een aantal beveiligingsopties. Zo moet bijvoorbeeld gewoon ingelogd worden om de WebAPI te kunnen gebruiken. 

Credentials

Om gebruik te mogen maken van de WebAPI methods dienen credentials meegegeven te worden van een Smartsite account. Dit is dan tevens het account dat gebruikt wordt om de method(s) uit te voeren, en (dus) ook waarmee beveiligings- en toegangschecks op bijvoorbeeld items worden uitgevoerd.
 
De credentials kunnen op twee manieren mee- of doorgegeven worden:
  • door middel van het zetten van een authorization header.
  • door middel van het aanroepen van de login method.

Het zetten van een authorization header heeft hierbij de voorkeur, zie voorbeeld hieronder:

using (HttpClient client = new HttpClient())
{
// set Authorization header
client.DefaultRequestHeaders.Authorization =
new System.Net.Http.Headers.AuthenticationHeaderValue("Basic",
Convert.ToBase64String(Encoding.ASCII.GetBytes($"{options.Username}:{options.Password}"))
);

// call any method(s) ...
}

Het gebruiken van de login method kan op de volgende manier:

using (HttpClient client = new HttpClient())
{
string qs = $"username={options.Username}&password={options.Password}";
string requestUrl = $"{options.Url}/login?{qs}";
var response = await client.GetAsync(requestUrl);
if (response.IsSuccessStatusCode)
{
// call any method(s) ...
}
}

(Beide voorbeelden: C#, .NET 5.0, bijvoorbeeld vanuit een console application. In deze voorbeelden is options een configuratie class.)

Url toegang 

Standaard is de WebAPI alleen toegankelijk via een localhost adres, zodat deze voor (bijvoorbeeld) de webapi macro prima bereikbaar is (vanuit de rendering) maar van buitenaf niet zomaar aangeroepen kan worden. In sommige scenario's kan het echter wenselijk danwel noodzakelijk zijn om de WebAPI ook van buitenaf benaderbaar te maken.

Om dit mogelijk te maken kan de app setting webapi.localhostonly toegevoegd worden aan de appSettings in de web.config van de manager (WWWMgr\web.config dus) met de waarde false. Default is deze instelling dus true.

mgr-WebApiAccess privilege

Standaard moet het opgegeven account ook via één van zijn/haar rollen het privilege mgr-WebApiAccess gekoppeld hebben. Met uitzondering van (het aanroepen van) de cmsupdate methode, vanwege backwards compatibiliteit.

Indien gewenst kan deze privilege check uitgeschakeld worden via de app setting webapi.useprivilege. (Eveneens dus via de appSettings in de WWWMgr\web.config. App settting toevoegen met de waarde false.)

Overigens, één van zijn/haar rollen geldt ook voor andere beveiligings- en toegangchecks. Binnen de manager kan een gebruiker een specifieke rol selecteren, voor zover van toepassing. Binnen de WebAPI wordt voor dit soort checks altijd naar alle rollen gekeken, waaraan de gebruiker is gekoppeld. Als één van de rollen toegang heeft en/of "iets" mag, dan kan de onderliggende functionaliteit uitgevoerd worden door de WebAPI.

Methods

Hieronder een beknopt overzicht van welke methodes er beschikbaar zijn binnen de WebAPI.

Method name Http method Omschrijving
getitemnumberbycode get  Methode om op basis van een code een itemnummer op te vragen. 
loaditemversion get  Hiermee kan de zgn. -1 versie van een item worden opgevraagd. De xml die wordt geretourneerd kan vervolgens als basis dienen om savecmsitem aan te roepen. 
cmsupdate  post  Backwards compatibility method, welke wordt gebruikt vanuit de cmsupdate macro.  
savecmsitem post  Methode om een item aan te maken of te wijzigen. 
uploadfile post  Methode waarmee upload functionaliteit kan worden gerealiseerd. 
activateitems post  Methode waarmee één of meerdere items geactiveerd kunnen worden. 
deactivateitems post  Methode waarmee één of meerdere items gedeactiveerd kunnen worden. 
archiveitems post  Methode waarmee één of meerdere items gearchiveerd kunnen worden. 
deleteitems post Methode waarmee één of meerdere items verwijderd kunnen worden.
togglefolder get  Met deze method kan een item naar een folder worden omgezet of vice-versa.

In principe zullen alle methods een status code 200 teruggeven, tenzij er een fout optreedt. In dat geval wordt er een status code 500 (internal server error) teruggegeven en wordt de foutmelding als response content terug gestuurd. Afhankelijk van de instelling binnen IIS wat betreft custom errors afhandeling (customErrors element) is deze dan wel of niet beschikbaar op de client.

Een item aanmaken

Een item aanmaken kan door de savecmsitem methode aan te roepen. De xml payload moet dan geen item nummer bevatten, maar juist wel een parent nummer waaronder het nieuwe item moet worden aangemaakt. De WebAPI geeft het item nummer van het nieuwe item terug als resultaat.

Een item opvragen

Een item opvragen kan met behulp van de loaditemversion methode. Hiermee wordt de huidige versie (de zogenaamde "-1 versie") geladen, gelijk aan de versie als het item binnen de manager zou worden bewerkt. De resulterende xml wordt 1 op 1 doorgestuurd als resultaat.
Deze xml kan als basis worden gebruikt om een item te bewerken via de WebAPI.

Een item bijwerken

Een item bewerken gaat eveneens via de savecmsitem methode. Het verschil tussen het toevoegen en het bewerken van een item ligt in feite vast in de xml payload die wordt meegestuurd. Als geen itemnummer of een (bestaande) item code wordt meegegeven, dan wordt automatisch omgeschakeld naar het toevoegen van een item. Anders betreft het altijd het wijzigen van een item.

 

 

 

Topics