REST Architectural Constraints

REST står för Representational State Transfer, en term som myntades av Roy Fielding 2000. Det är en arkitekturstil för att designa löst kopplade applikationer över HTTP, som ofta används i utvecklingen av webbtjänster. REST genomdriver inte någon regel om hur den ska implementeras på lägre nivå, det sätter bara riktlinjer på hög nivå och låter dig tänka på din egen implementering.

i min senaste anställning designade jag RESTful API: er för ett stort telekomföretag under två bra år. I det här inlägget kommer jag att dela mina tankar förutom standarddesignpraxis. Du kanske inte håller med mig på några punkter, och det är helt OK. Jag kommer gärna att diskutera allt från dig med ett öppet sinne.

Låt oss börja med standarddesignspecifika saker för att rensa vad ’Roy Fielding’ vill att vi ska bygga. Då kommer vi att diskutera mina tankar, vilket kommer att vara mer mot finare punkter medan du utformar dina vilsamma API: er.

arkitektoniska begränsningar

REST definierar 6 arkitektoniska begränsningar som gör någon webbtjänst – en sann RESTful API.

  1. enhetligt gränssnitt
  2. klient-server
  3. statslös
  4. Cacheable
  5. skiktat system
  6. kod på begäran (valfritt)

enhetligt gränssnitt

eftersom begränsningsnamnet själv gäller måste du bestämma API-gränssnitt för resurser i systemet som utsätts för API-konsumenter och följer religiöst. En resurs i systemet bör bara ha en logisk URI, och det bör ge ett sätt att hämta relaterade eller ytterligare data. Det är alltid bättre att synonyma en resurs med en webbsida.

varje enskild resurs bör inte vara för stor och innehålla allt i sin representation. När det är relevant bör en resurs innehålla länkar (HATEOAS) som pekar på relativa URI: er för att hämta relaterad information.

resursrepresentationerna i hela systemet bör också följa specifika riktlinjer som namnkonventioner, länkformat eller dataformat (XML eller/och JSON).

alla resurser bör vara tillgängliga genom ett gemensamt tillvägagångssätt som HTTP GET och på liknande sätt modifieras med ett konsekvent tillvägagångssätt.

när en utvecklare blir bekant med en av dina API: er bör han kunna följa ett liknande tillvägagångssätt för andra API: er.

Client-server

denna begränsning innebär i huvudsak att klientapplikation och serverapplikation måste kunna utvecklas separat utan något beroende av varandra. En klient borde bara veta resurs Uri, och det är allt. Idag är detta standardpraxis inom webbutveckling, så inget fancy krävs från din sida. Håll det enkelt.

servrar och klienter kan också bytas ut och utvecklas oberoende, så länge gränssnittet mellan dem inte ändras.

statslös

Roy fielding fick inspiration från HTTP, så det återspeglar i denna begränsning. Gör alla klient – server-interaktioner statslösa. Servern kommer inte att lagra något om den senaste HTTP-begäran klienten gjort. Det kommer att behandla varje begäran som ny. Ingen session, ingen historia.

om klientapplikationen måste vara en statlig applikation för slutanvändaren, där användaren loggar in en gång och gör andra auktoriserade operationer efter det, ska varje begäran från klienten innehålla all information som behövs för att betjäna begäran-inklusive autentiserings – och auktoriseringsuppgifter.

inget klientkontext ska lagras på servern mellan förfrågningar. Klienten ansvarar för att hantera tillståndet för ansökan.

Cacheable

i dagens värld är cachning av data och svar av yttersta vikt varhelst de är tillämpliga/möjliga. Webbsidan du läser här är också en cachad version av HTML-sidan. Caching ger prestandaförbättring för klientsidan och bättre utrymme för skalbarhet för en server eftersom belastningen har minskat.

i REST ska cachning tillämpas på resurser när det är tillämpligt, och då måste dessa resurser förklara sig cacheabla. Caching kan implementeras på servern eller klientsidan.

välskött cachning eliminerar delvis eller helt vissa klient-server-interaktioner, vilket ytterligare förbättrar skalbarhet och prestanda.

Layered system

REST låter dig använda en layered systemarkitektur där du distribuerar API: erna på server A och lagrar data på server B och autentiserar förfrågningar i Server C, till exempel. En klient kan vanligtvis inte berätta om den är ansluten direkt till slutservern eller en mellanhand på vägen.

kod på begäran (valfritt)

Tja, denna begränsning är valfri. För det mesta kommer du att skicka statiska representationer av resurser i form av XML eller JSON. Men när du behöver, är du fri att return executable code för att stödja en del av din ansökan, t.ex. kunder kan ringa din API för att få en UI widget rendering kod. Det är tillåtet.

alla ovanstående begränsningar hjälper dig att bygga ett verkligt vilsamt API, och du bör följa dem. Fortfarande, ibland, du kan hitta dig själv bryter mot en eller två begränsningar. Oroa dig inte; du gör fortfarande en vilsam API-men inte ” verkligen vilsam.”

Observera att alla ovanstående begränsningar är närmast relaterade till WWW (webben). Med RESTful API: er kan du göra samma sak med dina webbtjänster vad du gör på webbsidor.

var den här artikeln till hjälp?

Ja
Nej

Lämna ett svar

Din e-postadress kommer inte publiceras.

More: