HTTP & APIer

HTTP

HyperText Transfer Protocol

En överföring sker på webben sker via HTTP-protokollet

Främst via GET för att hämta från en server

POST för att skicka till en server

HTTP

REQUEST - RESPONSE

CLIENT - SERVER

Primära metoder

GET: Hämta data

POST: Skicka data

PATCH: Uppdatera data

PUT: Byta ut data

DELETE: Ta bort data

CRUD

Metoderna brukar kallas för CRUD:

  • Create
  • Read
  • Update
  • Delete

Typisk GET

Goat

Typisk GET

GET /index.html HTTP/1.1
Host: fed17.github.io 
GET HTTP/1.1
Host: https://fed17.github.io

<html>
<head>
  <title>FED17 homepage</title>
</head>

Det gick bra, här har du resursen (index.html)!

GET HTTP/1.1
Host: http://fed17.herokuapp.com/todos/1
{
  "id": 1,
  "text": "Buy Milk",
  "complete": false
}

Det gick bra, här har du resursen (todos.json)!

HTTP Headers

Liknande som en html har en <head>-tagg samt en <body>-tagg

Har varje request HEADERS och BODY

HEADERS

meta data om varje förfrågan

Berättar om vilket typ av innehåll som levereras, hur länge innehållet ska samt vilka som får komma åt innehållet

API

Application Programmable Interface
//Funktionen innehåller vår implementation
function getAllListItems(){
  return document.getElementsByTagName('li');
}
//När vi kallar på den
//använder vi abstraktionen
getAllListItems();

Abstraktion / Implementation

Interfacet utåt, det vi döper våra funktioner till i princip

Implementationen är själva koden som ligger i funktionen eller metoden. Den är undangömd.

Vi behöver läsa ut vad abstraktionen gör och inte bry oss om implementationen.

Application Programmable Interface

Ett API är de funktioner/metoder som din applikation visar utåt publikt.

Är de funktioner som vi interagerar med, vi behöver inte se koden bakom.

Olika API:er

DOM API

JavaScript API

API i relation till webben

Oftast pratar man om APIer som har endpoints där man hämtar data ifrån

Servrar som exponerar URLer där man kan hämta enbart data ifrån och inte hemsidor.

Oftat får man tillbaka informationen i form av JSON

Web API

Skicka och hämta data via HTTP-protokollet med enkla medel

GET / POST / PATCH / DELETE

ReST API

Representational State Transfer

Servern bestämmer vad som kan skickas ut. Användaren behöver i princip bara gå till URLen för att hämta informationen.

Vi som användare behöver inte känna till strukturen av APIt, bara hur vi ska komma åt den.

Öppna APIer

Internt använder alla sidor sitt eget API för att manipulera data

Vissa företag väljer att göra denna data publik och öppna sina endpoints för externa användare.

Tre typer av öppna APIer

  • Superöppna, vem som helst får göra vad som helst. (se fixer.io)
  • API-nyckel, du får göra ganska mycket bara du identierar dig själv med en kod (se openweathermap)
  • Autentiseringsflöde med backend, krävs ett specifikt inloggningsflöde (se spotify)

GET All users

Alla moderna APIer har följande upplägg:

GET: https://myapi.com/users

Hämtar samtliga användare

Det som returneras är nästan alltid JSON

Create a new user

POST: https://myapi.com/users

Samma url men metoden är annorlunda

Vi indikerar att vi ska skicka med information till servers med POST

Enskilda resurser

GET https://myapi.com/users/12

URLen indikerar: en användare

12 är i det här fallet ett unikt id för användaren

Enskilda resurser

DELETE https://myapi.com/users/12

Samma URL men metoden är annorlunda

Användare nr 12 ska bort!

Enskilda resurser

PATCH https://myapi.com/user/12

Samma URL men metoden är annorlunda

Användare nr 12 ska ändras!

GET / POST / PATCH / DELETE

Med POST och PATCH måste vi skicka med ny information

Med GET och DELETE behöver vi inte skicka med ny information eftersom vi inte ska modifiera

GET är den enda "säkra" metoden

ReST API

REST-compliant Web services allow requesting systems to access and manipulate textual representations of Web resources using a uniform and predefined set of stateless operations.
Ref: Wiki - REST

Roy Fielding

"Architectural Styles and the Design of Network-based Software Architectures"

Dissertation @ UNIVERSITY OF CALIFORNIA

There are six guiding constraints that define a RESTful system

Web service APIs that adhere to the REST architectural constraints are called RESTful APIs

REST är varken en standard eller ett protokoll

Ref: restfulapi.net
In simplest words, in the REST architectural style, data and functionality are considered resources and are accessed using Uniform Resource Identifiers (URIs).
Ref: restfulapi.net

Stateless

The client–server communication is constrained by no client context being stored on the server between requests.

Alla requests sker isolerade från varandra.

Servern behöver inte ha någon information från dig: användaren.

Representational

En resurs kan identifieras med en URL. Resursen som användaren ser behöver dock inte vara av samma format som lagras på servern.

På samma sätt som du hämtar informationen kan du även manipulera informationen och lagra ny information. All metadata för att göra detta har du redan.

A REST API should be entered with no prior knowledge beyond the initial URI (bookmark) and set of standardized media types that are appropriate for the intended audience (i.e., expected to be understood by any client that might use the API).
Ref: restfulapi.net