HTTP-protokollet

HyperText Transfer Protocol

Rewind

Vi använder en URL för att besöka en hemsida:

https://vecka.nu

protokoll://domainname.topdomain

IP/DNS

Varje enhet på internet har ett unikt IP.

Vi kopplar upp oss mot varandras IP via ett domännamn

All data skickas via detta protokoll

Men det är inte allt...

TCP/IP

Transmission Control Protocol

Transmission: Överföring av data

Control: Kontrollera att data är skickad

Protocol: standardiserat sätt

Control

Vid varje överföring måste protokollet verifera att data skickas mellan parterna

TCP

SYN, SYN/ACK, SYN

SYN / ACK

Synchronize: Ena sidan skickar sin info

Acknowledgment: Den andra bekräftar att infon är mottaget

Processen brukar kallas Three-way handshake

TCP har koll på sin shit

TCP är säkert, själva protokollet kollar att allting kommer fram och att allting kommer fram i rätt ordning.

Important

Här skakas viktiga händer

Vi har också UDP

  • User
  • Datagram
  • Protocol
Firehose

Use Cases

Multiplayer games

Vi vill inte ha uppkoppling mellan enskilda spelar

Alla som spelar eller "lyssnar på informationen ska få den

Broadcast

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: fend16.github.io 
HTTP/1.1 200 OK

<html>
<head>
  <title>FEND16 HomePage bla bla</title>
</head>

HTTP Status Codes

Den bästa: 200 OK

Den sämsta: 404 NOT FOUND

I'm a Teapot httpstatuses.com

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

API is all around us

So come on and let it show!

//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

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

GET HTTP/1.1
Host: https://myapi.com/users
[
  {
    "id": "1",
    "name": "User1"
  }
]

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.

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

GET /users
[
  {
    "name": "Gurt"
  },
  {
    "name": "Flurt"
  }
]
POST /users
name=Kurt
{
  "name": "Kurt"
}
GET /users
[
  {
    "name": "Gurt"
  },
  {
    "name": "Flurt"
  },
  {
    "name": "Kurt"
  }
]

Enskilda resurser

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

URLen indikerar singular: en användare

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

Enskilda resurser

DELETE https://myapi.com/user/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

Postman exempel