Ontcijferen van RESTful API’s: Een diepe duik in Endpoints en Resources

Representational State Transfer (REST) is een software-architectuurstijl die richtlijnen biedt over hoe een API zou moeten werken. Het is gemaakt als een leidraad om communicatie te beheren op een complex netwerk zoals het internet. REST is een set van principes en beperkingen die, wanneer gevolgd, de creatie van schaalbare, efficiënte en onderhoudbare webdiensten mogelijk maken.

RESTful API’s, of REST API’s, zijn API’s die de REST-architectuurstijl volgen voor het ontwerpen en interactie met webdiensten. Naast het gebruik van de API’s om te communiceren en gegevens te delen tussen twee of meer software of applicaties, dragen RESTful API’s bij aan de efficiëntie, schaalbaarheid en flexibiliteit van webapplicaties, en spelen ze een belangrijke rol in webontwikkeling. Andere voordelen van RESTful API’s op het gebied van webontwikkeling zijn statelessness, compatibiliteit en interoperabiliteit, vereenvoudigde integratie, verbeterde beveiliging en eenvoud.

Twee belangrijke concepten die essentieel zijn voor het begrijpen van hoe RESTful API’s werken, zijn: Eindpunten en Hulpbronnen

  • HELPERBRONNEN: Hulpbronnen zijn alle informatie die geïdentificeerd, benoemd en gemanipuleerd kan worden. Ze zijn de belangrijkste abstracties die via de API worden blootgesteld.

  • ENDPUNT: Een eindpunt is het toegangspunt of de specifieke URL (Uniform Resource Locator) of URI die een hulpbron of een verzameling hulpbronnen vertegenwoordigt waarmee cliënten kunnen interageren met de API.

De belangrijkste principes van RESTful-architectuur, ook wel bekend als REST-beperkingen, definiëren gezamenlijk de RESTful-architectuur en leiden het ontwerp van webservices die zich aan deze beperkingen houden. De principes omvatten:

  • STATELESSNESS: Elke aanvraag van een client naar een server moet alle informatie bevatten die nodig is om het verzoek te begrijpen en te verwerken. Statelessheid verbetert de schaalbaarheid en vereenvoudigt de serverimplementatie.

  • UNIFORME INTERFACE: Subbeperkingen zoals identificatie van resources via URL, manipulatie van resources via representatie, zelfbeschrijvend bericht, en interactie van clients met applicaties uitsluitend via hypermedia, ook wel bekend als HATEOAS (Hypermedia as the Engine of Application State), zorgen voor een uniforme en consistente interface.

  • CLIENT-SERVER ARCHITECTUUR: RESTful systemen volgen een structuur waarbij de client en server afzonderlijke entiteiten zijn die communiceren via een netwerk. De client is verantwoordelijk voor de gebruikersinterface en gebruikerservaring, terwijl de server verantwoordelijk is voor het verwerken van verzoeken, het beheren van bronnen en het onderhouden van de zakelijke logica van de applicatie. Deze scheiding van verantwoordelijkheden verbetert de schaalbaarheid en flexibiliteit.

  • LAYERED SYSTEEM: Er zijn meerdere lagen met elk hun specifieke functionaliteit in de REST-architectuur. Elke laag communiceert met de aangrenzende laag om modulariteit en schaalbaarheid te bevorderen.

  • CODE OP VERZOEK: Dit principe biedt een manier voor clienttoepassingen om code te laden en uit te voeren die door de server wordt geleverd, waardoor de mogelijkheden van de client worden verbeterd. Hoewel “Code op verzoek” flexibiliteit kan bieden, is het niet altijd geschikt voor alle scenario’s vanwege beveiligingsoverwegingen en het potentiële toegenomen koppeling tussen de client en de server. De beslissing om “Code op verzoek” te gebruiken, hangt af van de specifieke vereisten en beperkingen van de te ontwikkelen toepassing.

  • CACHEBAARHEID: Cachebaarheid verbetert de prestaties door clients in staat te stellen eerder opgehaalde representaties opnieuw te gebruiken, waardoor de noodzaak voor herhaalde verzoeken aan de server wordt verminderd.

Endpoints definiëren de functionaliteit of acties die worden uitgevoerd op resources, zoals het ophalen van een lijst met items, het maken van een nieuw item, het bijwerken van een bestaand item of het verwijderen van een item. RESTful API’s hebben vaak meerdere eindpunten om verschillende bewerkingen uit te voeren op dezelfde resource of om te werken met verschillende resources.

Eindpunten spelen een belangrijke rol in het ontwerp van API’s door te fungeren als toegangspunten waardoor klanten kunnen interageren met de API. Enkele van de belangrijke eindpunten in API-ontwerp zijn:

  • Resource-exposure: Eindpunten definiëren de resources of verzameling van resources die worden blootgesteld door de API, en elk eindpunt definieert een specifieke resource of set resources, waardoor duidelijk wordt met welke resource of set resources een klant kan interacteren.

  • Operatiedefinitie: Eindpunten specificeren de actie die klanten kunnen uitvoeren op resources. HTTP-methoden zoals GET, POST, PUT en DELETE worden gebruikt om de actie te definiëren.

  • Modulariteit en Schaalbaarheid: Eindpunten bevorderen modulariteit door specifieke functionaliteiten samen te vatten die verband houden met een specifieke bron of reeks bronnen. Modulariteit verbetert het onderhoud van de API en maakt schaalbare ontwikkeling mogelijk.

  • Duidelijk en Intuïtief Ontwerp: Door betekenisvolle en consistente benamingconventies te kiezen voor eindpunten, kunnen ontwikkelaars gemakkelijk het doel en de functionaliteit van elk eindpunt begrijpen, wat bijdraagt aan de helderheid en intuïtief ontwerp van de API.

Er zijn verschillende soorten eindpunten gecategoriseerd op basis van hun functionaliteit en de soorten bewerkingen die ze ondersteunen. Enkele van de verschillende soorten zijn:

  • Lees- en Ophaaleindpunten: gebruikt om resources van de server op te halen met behulp van de HTTP GET-methode.

  • Maak- of POST-eindpunten: gebruikt om nieuwe resources op de server te maken met behulp van de HTTP POST-methode

  • Verwijder eindpunten: gebruikt om een resource op de server te verwijderen met behulp van de HTTP DELETE-methode

  • Bijwerken of PUT-eindpunten: gebruikt om bestaande resources op de server bij te werken met behulp van de HTTP PUT-methode.

  • Zoek- of Query-eindpunten: Stelt clients in staat om een subset van resources op te halen op basis van gespecificeerde criteria met behulp van de HTTP GET-methode.

  • Lijst-eindpunten: Haalt een verzameling of lijst van resources op met behulp van de HTTP GET-methode.

Bronnen zijn belangrijke abstracties die elke informatie vertegenwoordigen die geïdentificeerd, benoemd en gemanipuleerd kan worden. Voorbeelden van bronnen zijn gebruikersprofielen, artikelen en alle andere gegevensentiteiten waarmee applicaties te maken hebben. Bronnen kunnen worden geïdentificeerd met een unieke URI (Uniform Resource Identifier). Ze zijn meestal in JSON of XML-indelingen, en elke bron kan worden aangemaakt, opgehaald, bijgewerkt en verwijderd met behulp van standaard HTTP-methoden.

De basis van het bouwen van een RESTful-architectuur is het identificeren van de bronnen. Enkele belangrijke richtlijnen voor het identificeren van bronnen in API-ontwerp zijn:

  • Gebruik Zelfstandige Naamwoorden voor Bronnamen: in plaats van werkwoorden zoals “ophalen” of “halen” te gebruiken in de bronnaam, gebruik zelfstandige naamwoorden zoals “gebruikers” of “producten”.

  • Bronnaamgevingsconventies: Volg een consistente naamgevingsconventie voor bronnen. Namen die gemakkelijk te begrijpen en te onthouden zijn, dienen te worden gebruikt.

  • Gebruik meervoudsvormen voor verzamelingen van bronnen: Bijvoorbeeld ‘/gebruikers’ is een verzameling gebruikersbronnen en ‘/producten’ is een verzameling productbronnen.

  • Documentatie: API’s moeten duidelijk gedocumenteerd zijn om gebruikers in staat te stellen beschikbare bronnen te begrijpen en hoe ze ermee kunnen omgaan.

De relatie tussen bronnen en eindpunten is fundamenteel voor het ontwerp en de functionaliteit van een RESTful API. Enkele van de relaties tussen hen zijn:

  • Eindpunten als Toegangspunten: Een eindpunt is de specifieke URI of URL die overeenkomt met een bron of een verzameling bronnen. Het biedt een concreet toegangspunt waardoor klanten kunnen interacteren met de bron.

  • Eindpunt identificeert een Bron: Het eindpunt identificeert een bron of een set bronnen. Bijvoorbeeld, als je een bron hebt die gebruikers vertegenwoordigt, kan het eindpunt ‘/gebruikers’ zijn.

  • HTTP-methoden definiëren operaties: Endpoints zijn geassocieerd met specifieke HTTP-methoden (GET, POST, PUT, DELETE, enz.), die de operaties definiëren die kunnen worden uitgevoerd op de overeenkomstige resource.

  • Resource-representatie: Het endpoint wisselt representaties van de resource uit met de server wanneer de client ermee interageert. Deze representaties kunnen in verschillende formaten zijn, zoals JSON of XML, en bevatten de status of informatie over de resource. De representatie is de payload van het HTTP-verzoek of -antwoord.

  • Uniforme interface: De relatie tussen resources en endpoints voldoet aan de uniforme interfacebeperkingen van REST. De combinatie van resources en endpoints creëert een consistente en voorspelbare API-structuur.

  • HATEOAS (Hypermedia als de Motor van de Applicatiestatus): Het omvat het opnemen van hypermedia-links in de resource-representaties, waardoor clients dynamisch door de API kunnen navigeren.

De interactie tussen resources en eindpunten is cruciaal in het ontwerp van een RESTful API voor het ontwikkelen van een samenhangende en efficiënte architectuur. Resources, die conceptuele entiteiten vertegenwoordigen, definiëren de essentiële entiteiten van het systeem, zoals gebruikers of producten. Eindpunten, vertegenwoordigd door URI’s, fungeren als toegangspoorten voor clients om via gespecificeerde HTTP-methoden met deze resources te communiceren. Door de RESTful-principes te volgen, waarborgt deze symbiotische relatie een uniforme interface, zelfbeschrijvende communicatie en dynamische navigatie via hypermedia-links (HATEOAS). De zorgvuldige afstemming van resources en eindpunten is meer dan een technisch detail; het is een ontwerpprincipe dat de duidelijkheid, schaalbaarheid en aanpasbaarheid van de API stimuleert, resulterend in een naadloze en intuïtieve ervaring voor zowel ontwikkelaars als gebruikers.

Source:
https://inioluwa2003.hashnode.dev/demystifying-restful-apis-a-deep-dive-into-endpoints-and-resources