Services + REST och OAuth



Relevanta dokument
JavaScript in SharePoint and not just for Apps. Wictor Wilén

Swedbank Mobile Loadtesting. LoadRunner Mobile App protocol

Översikt. Installation av EasyPHP 1. Ladda ner från Jag använder Release Installera EasyPHP.

Webbteknik II. Föreläsning 4. Watching the river flow. John Häggerud, 2011

Webbtjänster med API er

TDP013. Webbprogrammering och interaktivitet. AJAX, CORS & jquery. Marcus Bendtsen Institutionen för Datavetenskap (IDA)

Webbtjänster med API er

Denna laboration skapades för elever vid Roslagens Högskola men kan användas av vem som helst. Namnen på servrarna måste i så fall ändras.

Distribuerade System, HT03

Introduktion till integrering av Schenkers e-tjänster. Version 2.0

Lösenordhantering i Device Config.

Serviceklass för Facebook Graph API

Tentamen TEN1 HI

Lab 6: ASP.NET 2.0 Providermodellen

Retrieve a set of frequently asked questions about digital loans and their answers

Evodev AB web epost Telefon Fax

Webbteknik II. Föreläsning 5. Restless farewell. John Häggerud, 2011

Lambdas. (och fler design patterns) Objekt-orienterad programmering och design (DIT952) Niklas Broberg, 2017

TDDD80. Mobila och sociala applikationer Introduktion HTTP,SaaS. Anders Fröberg Institutionen för Datavetenskap (IDA)

Tjänstegränssnitt Api Platsannons

Laboration 2 RESTful webb-api

Diagnostisktprov Utveckla i Azure

DB, DATA, LOGIC, EXPOSURE (WEB)

Testdriven utveckling av Web Services. Ole Matzura

API:er/Mashup. Föreläsning 4 API:er och Mashups. Johan Leitet johan.leitet@lnu.se twitter.com/leitet facebook.com/leitet. Webbteknik II, 1DV449

Beijer Electronics AB 2000, MA00336A,

Övningar Dag 2 En första klass

SAS USER FORUM SWEDEN 2017 USER FORUM. SAS Viya och öppenhet en gemomgång av LUA-, Java-, Python- och REST-gränssnitten mot SAS Viya

"HTML5 och relaterade API:er"

Objektsamlingar i Java

E12 "Evil is going on"

Arkitektur. Den Röda Tråden

Ajax TruClient. Erfarenheter, tips och trix från Swedbank IT. Christian Gerdes Performance Engineer, LIGHTS IN LINE AB

Om inte denna rekommendation efterföljs kan vi tyvärr inte ge några garantier för att vi kan supportera de problem som då kan uppstå.

Webbtjänster med API er

Introduktion till Entity Framework och LINQ. Källa och läs mer

Om inte denna rekommendation efterföljs kan vi tyvärr inte ge några garantier för att vi kan supportera de problem som då kan uppstå.

Modul 8 Hantering av indata

Android fortsättning. TDDD80 Mobila och sociala applikationer

ASP.NET MVC. Copyright Mahmud Al Hakim Innehåll

WWW. Exempel på klientsidan. Överföring av en html-fil. Snyggare variant. Verkligt format. Meddelandeformat för begäran HTTP

Arbeta med databas. Översikt. Lektion 1: Arbeta med Entity Data Models. Arbeta med Entity Data Models. LINQ (Language Integrated Query).

Föreläsning 6: Introduktion av listor

Styr de visuella byggstenarna som en sida är uppbyggt av. Block är rutor med

Webservice tjänsten GetPerson Slagning mot befolkningsregister

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Tentamen Nätverksprogrammering Lösningsförslag

Tjänstegränssnitt Api Platsannons

Authentication Context QC Statement. Stefan Santesson, 3xA Security AB

Det här dokumentet är till för att ge en översikt över ASP.NET MVC samt hur WCF Services används från.net applikationer.

Webbtjänster med API er

Dugga Datastrukturer (DAT036)

Grundläggande programmering med C# 7,5 högskolepoäng

Asp.net mvc intro PER KVARNBRINK,

Tentamen i Objektorienterad programmering

Prova på-laboration i PHP Johan Sjöholm johsj@ida.liu.se Institutionen för datavetenskap, Linköpings universitet

Schenker Privpak AB Telefon VAT Nr. SE Schenker ABs ansvarsbestämmelser, identiska med Box 905 Faxnr Säte: Borås

Webbteknik. Innehåll. Historisk återblick Teknisk beskrivning Märkspråk Standardisering Trender. En kort introduktion

Introduktion till arv

IT för personligt arbete F2

Behörighetssystem. Ska kontrollera att ingen läser, skriver, ändrar och/eller på annat sätt använder data utan rätt att göra det

Vitec Connect. Teknisk beskrivning REVIDERAT SENAST: VITEC. VITEC Affärsområde Mäklare

MVK SSO 2.0 Mina vårdkontakter

Föreläsning 10. ADT:er och datastrukturer

Snabbguide Visma Compact API Version 5.1 Copyright Visma Spcs AB Visma Compact API

Datasäkerhet och integritet

E13 "Behind the Wild"

Algoritmanalys. Genomsnittligen behövs n/2 jämförelser vilket är proportionellt mot n, vi säger att vi har en O(n) algoritm.

Dokumentation. Ver Sida 1

Säkerhet. Säker kommunikation - Nivå. Secure . Alice wants to send secret message, m, to Bob.

TDP013 Node.js, JSCoverage, Mocha. Marcus Bendtsen Institutionen för Datavetenskap

Objektorienterad Programkonstruktion, DD1346 FACIT. Tentamen , kl

F8 - Arv. ID1004 Objektorienterad programmering Fredrik Kilander

Sätta upp e-post server Ubuntu 14.04, del 1 installation av programvara, konfiguration av mysql och Postfix

Slutrapport YUNSIT.se Portfolio/blogg

Introduktion Schenker-BTL AB, Stab IT Beskrivning över informationsintegreringmed Schenker, metodbeskrivning version 1.

DRAFT Mottagningswebben Kravspecifikation

729G28. Webbprogrammering och databaser. Introduktion till webbutveckling med PHP. Jakob Pogulis Institutionen för Datavetenskap (IDA)

Dokumentation. Ver Sida 1

En snabb titt på XML LEKTION 6

HP ProtectTools. Komma igång

JobOffice SQL databas på server

Föreläsning 7. Träd och binära sökträd

Erik Wahlström Product Strategist 28/01/15

Lathund till PsycINFO (OVID)

1ME323 Webbteknik 3 Lektion 6 API. Rune Körnefors. Medieteknik Rune Körnefors

Tentamen. 2D4135 vt 2005 Objektorienterad programmering, design och analys med Java Lördagen den 28 maj 2005 kl

725G61 - Laboration 7 Implementation av ett API. Johan Falkenjack

Övning 1: Skapa virtuell maskin för utveckling.

Då Eduroam använder sig av WPA2 (kryptering) krävs att din dator har stöd för detta.

Föreläsning 2 Objektorienterad programmering DD1332. Typomvandling

Distribuerade affärssystem

Alla rättigheter till materialet reserverade Easec

Referensarkitektur: T-boken, RIV-TA och tjänstekontrakt Referensimplementationen av T-boken: SKLTP

Anvisningar vid utformning av adaptrar till NPÖ.

API Notera HTTPS POST msg UTF-8. API_key JSON Mobilnummer format 1. Skicka ett SMS till specifikt nummer POST parametrar: from msg API_key Exempel:

FlexiTid Extern webbokning. Copyright Datatal AB. Med ensamrätt. Copyright 2013 Datatal AB. All rights reserved.

Föreläsning 5 (6) Metoder. Metoder Deklarera. Metoder. Parametrar Returvärden Överlagring Konstruktorer Statiska metoder tostring() metoden javadoc

Programmering för språkteknologer II, HT2014. Rum

Webbtjänster med API er

Transkript:

Services + REST och OAuth

Syftet med Services Skapa ett Drupal API för att exponera webb- API:er.

Officiella versionen - Create a unified Drupal API for web services to be exposed in a variety of different server formats. - Provide a service browser to be able to test methods. - Allow distribution of API keys for developer access.

Services Funktionalitet uppdelad i tre olika sorters moduler som tillhandahåller: Servrar Tjänster Autentiseringsmekanismer (nytt i 2.x)

Servrar REST XMLRPC JSONRPC SOAP AMF (Binary Flash RPC protocol)

Tjänster Som exponerar core Node, user, taxonomy, menu, file, Som exponerar andra moduler Views Plus tjänster implementerade i andra contrib-moduler som jag inte kommer ihåg just nu.

Autentisering OAuth Key authentication

Att implementera tjänster Antigen som metoder...eller (sen version 2.x) som resurser

Metoder Tämligen likt menysystemet Varje tjänstemodul returnerar en ickeassociativ array med metoder Metod-definitioner innehåller ett methodattribut: node.get, node.view, node.save, node.delete...och information om callbacks, parametrar, åtkomstregler med mera.

<?php /** * Implementation of hook_service(). */ function node_service_service() { return array( // node.get array( '#method' => 'node.get', '#callback' => 'node_service_get', '#access callback' => 'node_service_get_access', '#file' => array('file' => 'inc', 'module' => 'node_service'), '#args' => array( array( '#name' => 'nid', '#type' => 'int', '#description' => t('a node ID.')),... '#return' => 'struct', '#help' => t('returns a node data.') ),

Nackdelar Ingen semantik node.view behandlas likadant som node.delete Inkonsekvenser taxonomy.saveterm, node.save node.view, user.get Svårt att förändra genom alter-hooks

Resurser Lägger till semantik till metoderna Naturlig gruppering kring resurser inga mer taxonomy.saveterm Metoderna delas upp i CRUD-operationer, actions, targeted actions och relationships

Struktur - CRUD Resurs Create Retrieve Update Delete (Index)

Utökning till CRUD Actions Som statiska klassmetoder: Node::publish_my_drafts() Targeted actions Som klassmetoder: $node->publish() Relationships Som targeted actions fast för läsoperationer: $node->get_comments()

Alla gamla tjänster kan uttryckas som resurser Direkt replikering genom att lägga till alla de gamla metoderna t.ex.: taxonomy.saveterm, savevocabulary, gettree, selectnodes som actions på resursen taxonomy. Eller ännu bättre, göra om dem till ordentliga resurser (vocabulary och term).

OAuth Säkert protokoll for att undvika the password anti-pattern. En standard som är på stark frammarsch. Klientimplementationer tillgängliga för de flesta stora och små språk. Se http://oauth.net/code

OAuth-flödet för användaren Påbörjar auktoriserings-processen i en tredjepartsapplikation (consumer). Skickas vidare till vår sajt (providern). Användaren loggar in på providern och får förfrågan om att auktorisera consumern. Användaren skickas tillbaka till consumern. Färdigt!

Token-baserad säkerhet Tre tokens (key och secret) är involverade: consumertoken, request-token och access-token. Consumern använder sin consumer-token för att hämta en request-token. Användaren auktoriserar vår request-token Consumern använder sin request-token för att hämta en access-token. Consumern använder consumer+access-token för att komma åt skyddade resurser.

REST servern REST är designat för att fungera så bra som möjligt med HTTP. Alla resurser åtkomliga via en url Create: POST http://example.com/node Retrieve: GET http://example.com/node/123 Index: GET http://example.com/node Update: PUT http://example.com/node/123 Delete: DELETE http://example.com/node/123

Utökningarna av CRUD Actions POST http://example.com/node/publish_my_drafts Targeted actions POST http://example.com/node/123/publish Relationships GET http://example.com/node/123/comments

Flera svarsformat XMLRPC returnerar alltid XML, JSONRPC ger JSON, SOAP ger XML+cruft och så vidare. REST är tämligen format-agnostiskt och kan ge svar i olika format baserat på filändelser eller Accept-headers. GET http://example.com/node/123.json GET http://example.com/node/123.xml GET http://example.com/node/123.php Andra moduler kan lägga till och ändra svarsformat genom hook_rest_server_response_formatters_alter().

Alla svarsformat ärver klassen RESTServerView <?php /** * Base class for all response format views */ abstract class RESTServerView { protected $model; protected $arguments; function construct($model, $arguments=array()) { $this-> ->model = $model; $this-> ->arguments = $arguments; } } public abstract function render();

Mer avancerade svarsformat De svarsformat som kan inte kan hanteras genom enkel serialisering RSS, ical, xcal med flera Formatet kan då kräva att metoden skall implementera en datamodell som fungerar som en adapter.

'XCalFormatView' => array( ), 'file' => 'XCalFormatView.inc', Exempel från xcal ); } function xcal_..._formatters_alter(&$formatters) { } $formatters['xcal'] = array( ); 'model' => 'ResourceTimeFeedModel', 'mime types' => array('application/xcal+xml'), 'view' => 'XCalFormatView', $formatters['ical'] = array( ); 'model' => 'ResourceTimeFeedModel', 'mime types' => array('text/calendar'), 'view' => 'XCalFormatView', 'view arguments' => array('transform'=> =>'ical'),

Resursen deklarerar stöd för modellen, ), inte formatet ), 'models' => array( ), 'ResourceFeedModel' => array( ), 'class' => 'NodeResourceFeedModel', 'ResourceTimeFeedModel' => array( ), 'class' => 'NodeResourceFeedModel', 'access arguments' => array('access content'),

Flera input-format Inbyggt stöd för x-www-form-urlencoded, yaml, json och serialiserad php. Kan utökas via hook_rest_server_request_parsers_alter(). Avgörs av Content-type-headern för anropen och matchas därför via mime-typ: 'application/json' => 'RESTServer::parseJSON', 'application/vnd.php.serialized' => 'RESTServer::parsePHP',

Min syn på services framtid - 3.x De gamla RPC-orienterade metoderna tas bort helt till förmån för resurser. Möjligen stödja översättning av metoddeklarationer till en resurs med actions. Endpoints: moduler, och administratörer, skall kunna publicera och konfigurera servrar på valfri plats i menysystemet.

Varför endpoints? Idag publiceras alla installerade tjänster på alla installerade servrar, och alla måste använda samma autentiseringsmodul.

Varför Endpoints? Detta gör att moduler inte kan använda sevices för att exponera ett API API = tjänster + server + autentiseringsmetod Eller rättare sagt, endast ett API kan exponeras Detta blir ett problem om services skall användas som ett framework för andra moduler att publicera API:er.

Endpoints Kan konfigureras oberoende av varandra. Och man kan välja: vilken server som skall användas exakt vilka tjänster som skall exponeras vilken autentiseringsmodul som skall användas och hur den skall vara konfigurerad

Endpoints gör det möjligt att Exponera flera olika API:er på en Drupalinstallation. I moduler definiera ett API som skall bli tillgängligt när modulen installeras. Paketera API:er som features, chaos toolsintegration planerat.

Exempel på endpointdeklaration

/** * Implementation of hook_services_endpoints(). */ function conglomerate_services_endpoints() { return array( 'conglomerate' => array( 'title' => 'Conglomerate API', 'server' => 'rest_server', 'path' => 'api', 'authentication' => 'services_oauth', 'authentication_settings' => array( 'oauth_context' => 'conglomerate', ), 'resources' => array( 'conglomerate-content' => array( 'alias' => 'content', 'operations' => array( 'create' => array( 'enabled' => TRUE, 'oauth_credentials' => 'token', 'oauth_authorization' => '*', ), 'retrieve' => array( 'enabled' => TRUE, 'oauth_credentials' => 'unsigned_consumer', 'oauth_authorization' => 'read', ), 'update' => array(

OAuth och Endpoints OAuth har nu stöd för olika kontext. Consumers placeras alltid i ett kontext Autentiseringar blir därför bara giltiga inom detta kontext Varje kontext kan ha egna auktoriseringsnivåer. Endpoints i services kan antigen använda sig av separata OAuth-kontext eller dela kontext

/** Deklarera OAuth kontext i kod <?php /** * Implementation of hook_oauth_default_contexts(). */ function conglomerate_oauth_default_contexts() { return array( 'conglomerate' => array( '*' => array( 'title' => 'Yes, I want to connect!appname to!sitename', 'description' => 'This will allow your site!appname to push content to!sitename', 'weight' => -1, ), 'read' => array( 'title' => 'I want to connect, but just to get stuff from!sitename', 'description' => 'This will allow!appname to fetch content from!sitename, but it will not allow any information to be pushed to!sitename.', 'weight' => 0, } ) ); ),

Hugo Wetterberg @hugowett hugo@goodold.se http://github.com/hugowetterberg