Bijgehouden sinds oktober 2019

De publieke API, en waarom het zeven jaar duurde

Platform revisie 5.4 leverde een token-geauthenticeerde API op in juni. Hier is wat het doet, wat het bewust weigert te doen, en waarom we zo lang hebben gewacht.

De API verliet de bèta op 2 juli. Hij werd in juni meegeleverd met platformrevisie 5.4, draaide vanaf februari als uitnodigingsbèta met iets meer dan vierhonderd accounts erop en is sinds april niet van vorm veranderd. Gekwalificeerd, gedocumenteerd en gedekt door dezelfde beschikbaarheidsbelofte als het paneel.

Het laat noemen is al te aardig. De reden is niet geheimzinnig: een interface bovenop een provisioningsysteem dat drie en een halve minuut nodig had om een server te bouwen, zou een interface zijn geweest voor het pollen van een spinner. We herschreven eerst de wachtrij, in 2025, en de volgorde was weloverwogen in plaats van geluk.

Wat het doet

GroepWat je kunt doenNotities
InstantiesCreëren, vergroten, opnieuw bouwen, snapshot nemen, herstellen, vernietigenVergroten is live, verkleinen vereist één reboot
ImagesHet OS-catalogus bekijken, een aangepaste ISO per URL registrerenAangepaste ISO-installaties zijn nog handmatig en nog traag
NetwerkenIPv4 toevoegen, reverse DNS bewerken, IPv6 /48 aanvragenGedelegeerd, nooit geproxied
FilteringAanvalgebeurtenissen lezen, layer-7-regels pushen op DDoS ProBasisfiltering heeft niets te configureren
FactureringSaldo lezen, facturen bekijken, een oplaadfactuur openenGeen kaartvelden, omdat er geen kaarten zijn
GebeurtenissenGebeurtenissenlogboek pollen of een webhook registrerenOndertekend met een per-account geheim

Alles is JSON over HTTPS, en elk object dat het paneel kan tonen, is een object dat de API kan retourneren. Er is geen functionaliteitslaag die alleen voor de webinterface is gereserveerd. Dat is een belofte die ons iets kost: het paneel gebruikt nu dezelfde openbare endpoints als jij, dus een kapotte API is een kapot paneel en we merken het direct.

Authenticatie

Tokens worden in het paneel aangemaakt, gescoped en precies één keer getoond. Geen wachtwoordauthenticatie, geen sessiecookies, geen redirect naar een identiteitsprovider die we dan zouden moeten vertrouwen met iets waar we veel moeite hebben gedaan om niet te verzamelen.

Een token heeft een bereik van lezen, schrijven of facturering, een optionele beperking tot één site, een optionele beperking tot een lijst van instanties, en een vervaldatum die je instelt. Zestig dagen is de standaard. Tokens kunnen individueel worden ingetrokken en de intrekking is binnen twee seconden actief aan de rand, wat meer uitmaakt dan het klinkt wanneer een buildserver opnieuw wordt gebouwd door iemand die niet wist wat erop stond.

Omdat een account hier een e-mailadres en een wachtwoordhash is, is er geen klantobject om op te halen. De API heeft geen naamveld, geen adresveld, geen bedrijfsveld en geen belastingveld, om exact de reden dat het aanmeldingsformulier dat ook niet heeft.

Snelheidslimieten, idempotentie, fouten

Zeshonderd reads per minuut en zestig writes, geteld per token in plaats van per account, zodat één luidruchtig script je andere automatisering niet kan uithongeren. Limieten worden in headers op elke reactie geretourneerd, inclusief succesvolle.

Elke schrijfbewerking accepteert een idempotentiesleutel. Probeer een creatie opnieuw met dezelfde sleutel en je krijgt de oorspronkelijke instantie terug in plaats van een tweede die daarnaast wordt gefactureerd. Dit is de functie waarvoor bètatesters ons het meest bedankten, wat iets zegt over hoe de rest van de industrie een time-out tijdens provisionering afhandelt.

Fouten zijn een gedocumenteerde machinecode, één zin die voor mensen leesbaar is, en een verzoekidentificatie. Plak de identificatie in een ticket en ondersteuning kan hetzelfde verzoek zien dat jij hebt gezien, zonder je te vragen het te reproduceren.

Wat het doelbewust niet doet

  • Geen fiatgeld, ooit. Facturatie-endpoints lezen je saldo en openen een oplaadfactuur. Afhandeling blijft bij OxaPay en de keten die je koos, precies zoals beschreven op de betalingspagina.
  • Geen subaccounts of rollen. Voortdurend aangevraagd. Niet gebouwd, omdat de voor de hand liggende implementatie betekent dat we een structuur bijhouden van wie-voor-wie-werkt, en we leveren liever tokens met een bereik die verlopen en laat je je organigram voor jezelf houden.
  • Geen autoschalen. Instanties zijn toegewijde kernen op echt silicium, niet een pool die we kunnen oproepen. Je kunt creëren en vernietigen op je eigen schema; we gaan niet doen alsof er een elastische abstractie onder zit.
  • Geen SDK-matrix. Eén referentieclient, en gewoon HTTP als contract. Zes half onderhouden taalbindingen zouden slechter verouderen dan de documentatie.

Wat we graag kapot zouden zien

De bèta vond negen bugs die het waard waren om te repareren, waarvan er drie op een interessante manier van ons waren en zes waren dat de documentatie loog. Als je een tiende vindt, is het misbruiken van een snelheidslimiet prima en verwacht tijdens het testen, en ondersteuning heeft liever de verzoekidentificatie dan een screenshot.

Referentie staat in de docs. De changelog voor revisie 5.4 vermeldt de zeven endpoints die tussen februari en april van vorm veranderden, en dat zijn de enige brekende veranderingen die er in versie één zullen zijn.

Klaar wanneer jij dat bent

Kies een stad. Kies een formaat. Betaal in munt.

Geen formulieren over wie je bent, geen wachten op een mens die je goedkeurt, geen telefoontje om iets te verifiëren. De factuur wordt betaald en de inloggegevens belanden in je inbox.