Hypertext Transfer Protocol
= Protokoll, auf dessen Basis Resourcen über das Netzwerk angefragt und übertragen werden können
Paar: Anfrage - Antwort
Anfrage: meist aus dem Browser
Antwort: kommt vom Server
HTTP Anfragen und Antworten werden wiederum über ein "niedrigeres" Protokoll übertragen, üblicherweise TCP.
Anfrageformat:
Antwortformat:
Möglichkeiten:
Anfrage:
GET /wiki/Main_Page HTTP/2.0
Host: en.wikipedia.org
Connection: keep-alive
Antwort:
HTTP/2.0 200 OK
Date: Wed, 24 Apr 2019 07:50:41 GMT
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html ...
Anfrage:
GET /w/index.php?search=test&title=Special:Search&go=Go HTTP/2.0
Host: en.wikipedia.org
Connection: keep-alive
Antwort:
HTTP/2.0 302 Found
Location: https://en.wikipedia.org/wiki/Test
Content-Length: 0
Anfrage:
GET /wiki/Test HTTP/2.0
Host: en.wikipedia.org
Connection: keep-alive
Antwort:
HTTP/2.0 200 OK
Content-Type: text/html; charset=UTF-8
<!DOCTYPE html>
<html ...
Anfrage:
POST /submit-posting HTTP/2.0
Host: example.com
Connection: keep-alive
Content-Type: text/plain; encoding=UTF-8
Content-Length: 33
This is the post content (body)
Antwort:
HTTP/2.0 200 OK
Content-Type: text/html; charset=UTF-8
...
GET /todos/12
Host: jsonplaceholder.typicode.com
Connection: keep-alive
HTTP/2.0 200 OK
Content-Type: application/json; charset=utf-8
Etag: W/"5c-cn8o...
{
"userId": 1,
"id": 12,
"title": "ipsa repellendus fugit nisi",
"completed": true
}
Host
Connection
Origin
Accept
Accept-Encoding
Cookie
Cache-Control
Authorization
200 OK
301 Moved Permanently
307 Temporary Redirect
(Weiterleitung auf eine andere Adresse)303 See Other
(Weiterleitung auf eine andere Adresse, Methode ändert sich zu GET
)308 Permanent Redirect
304 Not Modified
(Resource hat sich seit letzter Anfrage nicht geändert)400 Bad Request
401 Unauthorized
403 Forbidden
404 Not Found
500 Internal Server Error
siehe auch: https://en.wikipedia.org/wiki/List_of_HTTP_status_codes
Content-Length
Content-Type
Set-Cookie
Location
Cache-Control
Mögliche Werte:
text/plain; charset=utf-8
text/html; charset=utf-8
application/json
application/javascript
application/ecmascript
image/jpeg
image/png
Beispiel:
GET /
Host: www.google.com
Set-Cookie: 1P_JAR=2019-04-24-08; expires=...; path=/; domain=.google.com
Set-Cookie: IDCC=AN0-TYtU7...fo; expires=...; path=/; domain=.google.com
HTTP API / Web API = Möglichkeit, Datensätze zwischen Client und Server auszutauschen
Standards:
Anfrageformat:
Antwortformat:
REST, JSON-RPC: Endpunkte / Methoden sind vorgegeben (z.B. posts_of_friends, suggested_friends, ...)
GraphQL: Client kann eigene Query flexibel zusammenstellen
Vorteil von GraphQL: Flexibler, neue Funktionalität benötigt oft keinen zusätzlichen Backend-Code
Nachteil von GraphQL: Benötigt oft zusätzlichen Code um Zugriffe zu beschränken (z.B. Verhindern, auf Posts von vorgeschlagenen Freunden zuzugreifen)
REST wird üblicherweise mit HTTP verwendet, API-Aufrufe werden durch die HTTP-Methode unterschieden (get, post, ...)
JSON-RPC und GraphQL können mit anderen Protokollen verwendet werden, z.B. WebSockets
RPC = remote procedure call
Beispiel für Request-Body:
{
"jsonrpc": "2.0",
"method": "get_todo_by_id",
"params": { "id": 1 },
"id": 1234
}
Beispiel für Response-Body:
{
"jsonrpc": "2.0",
"error": null,
"result": [
{ "id": 1, "title": "groceries", "completed": false }
],
"id": 1234
}
REST = Representational State Transfer
Hauptsächlich via HTTP Requests mit diesen Methoden:
GET
POST
PUT
PATCH
PUT
DELETE
POST
get: Abfrage mehrerer Elemente:
GET /todos HTTP/2.0
Host: jsonplaceholder.typicode.com
get: Abfrage eines einzelnen Elements:
GET /todos/2 HTTP/2.0
Host: jsonplaceholder.typicode.com
get: Abfragen mehrerer Elemente:
GET /todos?userId=1&completed=false
Host: jsonplaceholder.typicode.com
post: Hinzufügen eines Eintrags:
POST /todos HTTP/2.0
Host: jsonplaceholder.typicode.com
Content-Type: application/json
Content-Length: 27
{
"title": "learn REST",
"completed": false
}
patch: Ändern eines Eintrags:
PATCH /todos/6 HTTP/2.0
Host: jsonplaceholder.typicode.com
Content-Type: application/json
Content-Length: 23
{
"completed": true
}
delete: Löschen eines Eintrags:
DELETE /todos/6 HTTP/2.0
Host: jsonplaceholder.typicode.com
post: Andere Anfragen (Löschen aller erledigter Todos):
POST /todos/delete_completed HTTP/2.0
Host: ...
Beispiele für REST APIs: