REST i Ladok3 Jan Stenberg, Knowit Senior arkitekt i Ladok3 2013-10-23 Detta blir lite tekniskt, jag försöker hålla presentationen på en konceptuell nivå, men det rör ett tekniskt ämne. Jan Stenberg, Knowit Senior arkitekt i Ladok3 2013-10-23
Agenda Introduktion Bakgrund Valet av REST för Ladok3 REST-principer REST i Ladok3 Ladok3:s arkitektur Exempel, REST - Ladok3 Summering
Introduktion Ladok3 har valt REST Ett gemensamt gränssnitt för Ladok3 Externt och internt Användargränssnitt Webbaserat mot användare, REST internt Web API för lärosäten Vi har valt REST och jag återkommer till varför. REST är inte ett protokoll, det är egentligen en arkitekturell stil, som syns i gränssnittet.
Bakgrund Web Services, WS, var ett paradigmskifte när det kom Vi gick från proprietära protokoll som DCOM, RMI och CORBA, (som var standardiserade på papperet men inte i verkligheten), till integration med XML och standard-protokoll. Men… WS använder bara en del av http-protokollet, för transport. WS beskriver bara enskilda operationer. Ger ett beroende mellan klient och server REST kan beskriva ett flöde. RESTful betyder att vi kan beskriva processen eller ett flöde, jämför t.ex. med när du handlar på webben och styrs av websiten genom betalprocessen. Det klarar inte WSDL eller WADL, de beskriver enbart enskilda operationer.
Valet av REST för Ladok3 REST har många fördelar Och få nackdelar Plattformsoberoende Lösa kopplingar Skalbarhet, en eller flera servers Enkelhet Utvecklas snabbt mot att bli ”standard” för ett Web API Och få nackdelar Relativt nytt Vi kan inte automatgenerera kod för kommunikationen Inga reella alternativ, (SOAP, CORBA, DCOM, Java RMI) En nackdel vs. WS är att man med WS enkelt skapar kommunikationen. Men vi vill egentligen inte heller göra det, eftersom det skapar beroenden mellan klient och server.
Förändringar mot dagens Ladok Webb LW - utdata Webbgränssnitt för administratör Webbkomponenter TG – portlets Studentgränssnitt Tjänstegränssnitt T – SOAP LP – Ping REST SQL Direkta DB frågor/uppdateringar SQL (enbart för läsning) Enbart i Uppföljning
Webben som applikationsplattform Världens största distribuerade informationssystem ”Alla” plattformar Prestanda Stateless - lätt att replikera Skalbarhet - Internet-scale Löst kopplat, allt måste inte vara igång Ladok3:s plattform (idémässigt)
HTTP Hypertext Transfer Protocol Protokollet för webben url http html Ett applikationsprotokoll, (inte bara ett transportprotokoll) Header som beskriver ett meddelande Body med själva meddelandet Webben består av tre huvudkomponenter: URL:er, HTTP och HTML I princip behöver inte webben och REST använda http men vi förutsätter att http är vårt protokoll. HTTP är ett applikationsprotokoll för distribuerade hypermedia-baserade informationssystem. HTTP är basen för datakommunikation på World Wide Web. Ett applikationsprotokoll betyder att det inte bara transporterar data, det stödjer också att en klient vill göra något.
HTTP-meddelanden Request: Header: GET /studiedeltagande/student/... HTTP/1.1 Accept: application/vnd.ladok+xml Response: Header: Body: HTTP/1.1 200 OK Content-Type: application/vnd.ladok+xml Date: Wed, 23 Oct 2013 14:45:44 GMT <?xml version="1.0" encoding="UTF-8"?> ... Frågan saknar ”body” för vi skickar inte in något data, vi frågar efter något.
HTTP-metoder GET POST PUT DELETE Hämtar en representation av en resurs Inga sidoeffekter, ”idempotent” POST Skapar en ny resurs, utökar en resurs Servern skapar URI Skapar nya resurser PUT Uppdaterar en känd resurs, ”idempotent” DELETE Ta bort en resurs , ”idempotent” Andra verb är bland andra HEADER och OPTIONS ”Utan sidoeffekter” betyder att man kan återupprepa utan att det gör något.
Statuskoder HTTP/1.1 200 OK 1xx: Informational: Request received, continuing process 2xx: Success: The action was successfully received, understood, and accepted 3xx: Redirection: Further action must be taken in order to complete the request 4xx: Client error: The request contains bad syntax or cannot be fulfilled 5xx: Server error: The server failed to fulfill an apparently valid request
REpresentional State Transfer UNIVERSITY OF CALIFORNIA, IRVINE Architectural Styles and the Design of Network-based Software Architectures DISSERTATION submitted in partial satisfaction of the requirements for the degree of DOCTOR OF PHILOSOPHY in Information and Computer Science by Roy Thomas Fielding 2000 Begreppet REST kommer från en doktorsavhanldling av Roy Fielding, 2000 REST är inte ett protokoll, det är en arkitekturell stil.
Ett exempel amazon.com Webbplatsen leder mig genom ett flöde när jag lägger en order Adress Leveranssätt Betalning Sammanställning, lägg order Det här den vanliga webben. Webbplatsen leder mig, och styr mig. Det är precis det vi vill uppnå med ett REST-baserat gränssnitt, för datorer.
Resurs Vad som helst i ett system som en konsument kan interagera med: Information Dokument Webbsidor Kurs Kaffemaskin Transaktioner Avstånd mellan två punkter
Uniform Resource Identifier, URI Identifierar en resurs, skiljer en resurs från en annan En resurs kan ha flera identifierare / URI:er En URI kan också vara en adress till resursen, en URL, som ger åtkomst till resursen Exempel https://api.ladok.se/utbildningsinformation/kurs/4b5c041-...-800200c9a66 uuid: 4b5c0410-a68c-11e2-9e96-0800200c9a66 Adressen i webbläsaren. I detta sammanhang är URI = URL
Representation En representation av tillståndet på en resurs vid en viss tidpunkt På webben utbyter man representationer, aldrig den underliggande resursen Formatet på en representation beror på klientens önskemål: html, xml, json, etc. En resurs har samma adress, URL, oberoende av typ av representation
Exempel på representationer <Student> <Uid>71391050-2c39-11e3-8224-0800200c9a66</Uid> <Personnummer>19820117-9283</Personnummer> <Efternamn>Ålandsson</Efternamn> <Fornamn>Örjan</Fornamn> </Student> { "Uid":"71391050-2c39-11e3-8224-0800200c9a66", "Personnummer":"19820117-9283", "Efternamn":"Ålandsson” "Fornamn":"Örjan" } Två exempel på representation av samma resurs men i två olika format. XML överst JSON underst
Länkar Länkar bygger upp webben Representationer kan innehålla länkar, (URL:er) Länkar pekar på andra resurser. I ett studiedeltagande finns en länk till studenten Länkar visar på möjligheter för tillståndsförändringar I REST är länkar opaka, dvs. de ska inte tolkas Ett studiedeltagande rör en student och ett kurstillfälle, och indirekt också en kurs. Man kan göra registreringar, avbrott, återbud, osv. <Studiedeltagande> <link uri="http://api.ladok.se/studentinformation/student/d22…ef03" /> … </Studiedeltagande>
Hypermedia Hypermedia = länkar mellan information/media Länkar skapar ett hypermedia-format HATEOAS Hypermedia As The Engine Of Application State En klient följer länkar som en tjänst levererar i representationer Applikationen drivs framåt genom övergång från ett tillstånd till ett annat När applikationen når ett nytt tillstånd presenterar den vilka nya tillståndsövergångar som är möjliga
Relationer Ger semantik till en länk Vad länken betyder Varför en klient ska följa länken <Studiedeltagande> <link rel="student” uri="http://api.ladok.se/studentinformation/student/d22…ef03" /> … </Studiedeltagande> Relationer gör att klienten kan förstå vad en länk betyder.
Exempel på relationer Standard-relationer, IANA Link Relations registry self previous, next payment Ladok3-specifika http://relations.ladok.se/studiedeltagande/registrering http://relations.ladok.se/studentinformation/student Relationer är konstanta strängar. Utformas de som url:er kan de användas i dokumentations-sammanhang. Samma princip med url:er gäller för namespaces i XML-scheman.
Exempel url: http://api.ladok.se/antagning/… Antagning rel: registrering url: http://api.ladok.se/registrering/… url: http://api.ladok.se/registrering/… Skapar Deltagande rel: avbrott url: http://api.ladok.se/avbrott/…
Mediatyper Mediatypen beskriver format på en representation process-modellen, vad en klient kan göra för ett specifikt representations-format text/html, image/jpeg Ladok3 har två mediatyper: application/vnd.ladok+xml application/vnd.ladok+json
Relationer, länkar och mediatyper <Studiedeltagande> <link rel="student” uri="http://api.ladok.se/studentinformation/student/d22…ef03” mediaType=”application/vnd.ladok+xml” /> … </Studiedeltagande> Vad innebär länken: rel: VARFÖR vill jag komma åt den länkade resursen? uri: VAR finns resursen? mediaType: HUR ska jag tolka svaret?
Kontrakt Domain Application Protocol, DAP http://schemas.ladok.se/dap Utökar en mediatyp med applikationsspecifika värden på länk-relationer Begränsar http-protokollet Tre nyckelkomponenter Mediatyp, ex: application/vnd.ladok+xml Länk – relationer Beskriver rollen för länkade resurser http-verben Manipulerar resurser som ingår i protokollet Vårt domänspecifika protokoll, för Ladok3
RESTful REST – Fullt ut Human-webb – REST API Utforskande Klienten behöver inte känna till url:er Klienten kan upptäcka nya relationer Vad betyder allt detta? Det här tror jag är det viktigaste. RESTful betyder att vi kan beskriva processen eller ett flöde, jämför t.ex. med när du handlar på webben och styrs av websiten genom betalprocessen.
REST i Ladok3 RESTful – REST fullt ut Använder HTTP som ett applikationsprotokoll Hypermedia-drivet med länkar som leder klienten till andra resurser och driver tillståndsförändringar DAP Domain Application Protocol
Exempel Prata REST med Ladok3
Dokumentation Genereras maskinellt av tjänsterna Kommer troligtvis att finnas både online och som nedladdningsbar fil Innehåller text och XML-scheman https://www.mit.ladok.se/restdoc/resultat.html
<Domänhändelse> StudentEtablerad Arkitektur för Ladok3 Studenter Examen api.ladok.se Deltagande Utbildningar <Domänhändelse> StudentEtablerad Ladok3 Resultat Behörighet
Multitenant En klient till en tjänst, vårt GUI eller ett system hos ett lärosäte jobbar i kontextet av ett lärosäte. Autentisering som visar vilket lärosäte klienten tillhör Via Shibboleth Via certifikat Behörighet sätts utifrån klient. Behörighet administreras i Ladok3
Referenser Böcker RESTful Web APIs REST in Practice För de teknikintresserade
Summering Den vanliga webben men med XML eller JSON som format och med relationer för att beskriva länkar Resurser Representationer Hypermedia Länkar Relationer Servern leder klienten Ger ett oberoende mellan klient och server Plattformsoberoende, nu och i framtiden
Frågor? ?