Ein Bearer Token ist eine Art von Zugriffstoken, das zur Authentifizierung und Autorisierung in Webanwendungen und APIs verwendet wird. Der Begriff "Bearer" bedeutet „Inhaber“, was bedeutet, dass jeder, der dieses Token besitzt, Zugriff auf die geschützten Ressourcen hat – ohne zusätzliche Überprüfung.
Authorization: Bearer <token>
.GET /geschuetzte-daten HTTP/1.1
Host: api.example.com
Authorization: Bearer abcdef123456
💡 Tipp: Um die Sicherheit zu erhöhen, kann man Token mit kurzen Laufzeiten verwenden und sie nur über HTTPS übertragen.
Antwort-Header (Response Headers) sind HTTP-Header, die vom Server an den Client gesendet werden. Sie enthalten Informationen über die Serverantwort, wie Statuscodes, Inhaltstypen, Sicherheitsrichtlinien oder Caching-Regeln.
1. Server
Server: Apache/2.4.41 (Ubuntu)
2. Date
Date: Wed, 31 Jan 2025 12:34:56 GMT
3. Content-Type
Content-Type: text/html; charset=UTF-8
4. Content-Length
Content-Length: 3456
5. Cache-Control
Cache-Control: max-age=3600, must-revalidate
6. Set-Cookie
Set-Cookie: sessionId=abc123; Path=/; Secure; HttpOnly
7. ETag
ETag: "5d8c72a5f8d9f"
8. Location
Location: https://www.new-url.com/
9. Access-Control-Allow-Origin
Access-Control-Allow-Origin: *
10. Strict-Transport-Security
(HSTS)
Strict-Transport-Security: max-age=31536000; includeSubDomains
Antwort-Header helfen dem Client, die empfangene Antwort richtig zu interpretieren, Sicherheitsmaßnahmen einzuhalten und Caching-Strategien zu nutzen.
CORS (Cross-Origin Resource Sharing) ist ein Sicherheitsmechanismus, der von Webbrowsern implementiert wird, um zu kontrollieren, welche Webseiten auf Ressourcen von anderen Domains zugreifen dürfen. Standardmäßig blockieren Browser aus Sicherheitsgründen sogenannte Cross-Origin-Anfragen, also Anfragen von einer Webseite an eine andere Domain, ein anderes Protokoll oder einen anderen Port.
Ohne CORS könnten bösartige Webseiten im Hintergrund Anfragen an andere Server senden (z. B. API-Server oder Banking-Seiten), wodurch sensible Daten gestohlen oder missbraucht werden könnten (Cross-Site Request Forgery, CSRF). CORS sorgt dafür, dass nur explizit erlaubte Webseiten auf Ressourcen zugreifen dürfen.
Wenn eine Webanwendung eine Cross-Origin-Anfrage stellt (z. B. von http://example.com
an https://api.example.com
), sendet der Browser automatisch eine CORS-Anfrage. Der Server kann dann in den HTTP-Headern antworten, ob die Anfrage erlaubt ist:
Ohne CORS-Header:
Der Browser blockiert die Anfrage.
Mit CORS-Headern:
Der Server kann mit Access-Control-Allow-Origin: *
(alle Domains) oder einer bestimmten Domain (Access-Control-Allow-Origin: https://example.com
) antworten. Damit wird der Zugriff erlaubt.
Für einige Anfragen (z. B. mit PUT
, DELETE
, speziellen Headern) führt der Browser einen Preflight-Request mit der OPTIONS
-Methode aus. Der Server muss dann mit den richtigen CORS-Headern antworten, um die Hauptanfrage zu ermöglichen.
CORS ist eine wichtige Sicherheitsmaßnahme, die verhindert, dass unerlaubte Webseiten auf fremde Ressourcen zugreifen. Entwickler müssen serverseitig die richtigen Header setzen, um den Zugriff für legitime Clients zu erlauben.
Die Client-Server-Architektur ist ein verbreitetes Konzept in der Informatik, das die Struktur von Netzwerken und Anwendungen beschreibt. Sie trennt die Aufgaben zwischen den Client- und Server-Komponenten, die auf unterschiedlichen Maschinen oder Geräten laufen können. Hier sind die grundlegenden Merkmale:
Client: Der Client ist ein Endgerät oder eine Anwendung, die Anfragen an den Server stellt. Dies können Computer, Smartphones oder spezielle Softwareanwendungen sein. Clients sind in der Regel für die Benutzerinteraktion zuständig und senden Anfragen, um Informationen oder Dienste vom Server zu erhalten.
Server: Der Server ist ein leistungsfähigerer Computer oder eine Softwareanwendung, die die Anfragen der Clients bearbeitet und entsprechende Antworten oder Dienste bereitstellt. Der Server verarbeitet die Logik und Daten und sendet die Ergebnisse zurück an die Clients.
Kommunikation: Die Kommunikation zwischen Clients und Servern erfolgt in der Regel über ein Netzwerk, oft mithilfe von Protokollen wie HTTP (für Webanwendungen) oder TCP/IP. Die Clients senden Anfragen, und die Server antworten mit den angeforderten Daten oder Dienstleistungen.
Zentralisierte Ressourcen: Die Server bieten zentrale Ressourcen, wie Datenbanken oder Anwendungen, die von mehreren Clients genutzt werden können. Dies ermöglicht eine effiziente Nutzung von Ressourcen und erleichtert die Wartung und Aktualisierung.
Skalierbarkeit: Die Client-Server-Architektur ermöglicht es, Systeme leicht zu skalieren. Man kann weitere Server hinzufügen, um die Last zu verteilen, oder zusätzliche Clients, um mehr Benutzer zu unterstützen.
Sicherheit: Durch die Trennung von Client und Server können Sicherheitsmaßnahmen zentralisiert implementiert werden, was es einfacher macht, Daten und Dienste zu schützen.
Insgesamt bietet die Client-Server-Architektur eine flexible und effiziente Möglichkeit, Anwendungen und Dienste in verteilten Systemen bereitzustellen.
RESTful (Representational State Transfer) bezeichnet einen Architekturstil für verteilte Systeme, insbesondere für Webdienste. Es ist eine Methode zur Kommunikation zwischen Client und Server über das HTTP-Protokoll. RESTful Webservices sind APIs, die den Prinzipien des REST-Architekturstils folgen.
Ressourcenbasiertes Modell:
Verwendung von HTTP-Methoden:
GET
: Zum Abrufen einer Ressource.POST
: Zum Erstellen einer neuen Ressource.PUT
: Zum Aktualisieren einer bestehenden Ressource.DELETE
: Zum Löschen einer Ressource.PATCH
: Zum Teilweisen Aktualisieren einer bestehenden Ressource.Zustandslosigkeit (Stateless):
Client-Server-Architektur:
Cachebarkeit:
Einheitliche Schnittstelle:
Schichtenarchitektur:
Angenommen, wir haben eine API für die Verwaltung von "Benutzern" und "Posts" in einer Blogging-Anwendung:
/users
: Sammlung aller Benutzer/users/{id}
: Einzelner Benutzer mit der ID {id}
/posts
: Sammlung aller Blog-Posts/posts/{id}
: Einzelner Blog-Post mit der ID {id}
GET-Anfrage:
GET /users/1 HTTP/1.1
Host: api.example.com
Antwort:
{
"id": 1,
"name": "John Doe",
"email": "john.doe@example.com"
}
POST-Anfrage:
POST /users HTTP/1.1
Host: api.example.com
Content-Type: application/json
{
"name": "Jane Smith",
"email": "jane.smith@example.com"
}
Antwort:
HTTP/1.1 201 Created
Location: /users/2
RESTful APIs sind eine weit verbreitete Methode zur Erstellung von Webdiensten und bieten eine einfache, skalierbare und flexible Architektur für die Kommunikation zwischen Client und Server.
OpenAPI ist eine Spezifikation, die es Entwicklern ermöglicht, HTTP-basierte APIs zu definieren, zu erstellen, zu dokumentieren und zu konsumieren. Ursprünglich als Swagger bekannt, bietet OpenAPI ein standardisiertes Format zur Beschreibung der Funktionalität und Struktur von APIs. Hier sind einige Schlüsselaspekte von OpenAPI:
Standardisierte API-Beschreibung:
Interoperabilität:
Dokumentation:
API-Entwicklung und -Tests:
Community und Ökosystem:
Zusammengefasst ist OpenAPI ein mächtiges Werkzeug für die Definition, Erstellung, Dokumentation und Wartung von APIs, das durch seine Standardisierung und breite Unterstützung in der Entwickler-Community eine zentrale Rolle im modernen API-Management spielt.
PSR steht für "PHP Standards Recommendation" und ist eine Reihe von standardisierten Empfehlungen für die Entwicklung mit PHP. Diese Standards werden von der PHP-Fig (Framework Interoperability Group) entwickelt und sollen die Interoperabilität zwischen verschiedenen PHP-Frameworks und -Bibliotheken verbessern. Hier sind einige der bekanntesten PSRs:
PSR-1: Basic Coding Standard: Definiert grundlegende Kodierungsstandards wie Dateibenennung, Seitenkodierung und grundlegende Codierungsprinzipien, um die Codebasis konsistenter und lesbarer zu machen.
PSR-2: Coding Style Guide: Baut auf PSR-1 auf und bietet detaillierte Richtlinien für die Formatierung von PHP-Code, einschließlich Einrückungen, Zeilenlängen und die Platzierung von Klammern und Schlüsselwörtern.
PSR-3: Logger Interface: Definiert ein standardisiertes Interface für Logger-Bibliotheken, um die Austauschbarkeit von Logging-Komponenten zu gewährleisten.
PSR-4: Autoloading Standard: Beschreibt einen Autoloading-Standard für PHP-Dateien, der auf Namespaces basiert. Es ersetzt PSR-0 und bietet eine effizientere und flexiblere Möglichkeit, Klassen automatisch zu laden.
PSR-6: Caching Interface: Definiert ein standardisiertes Interface für Caching-Bibliotheken, um die Austauschbarkeit von Caching-Komponenten zu erleichtern.
PSR-7: HTTP Message Interface: Definiert Interfaces für HTTP-Nachrichten (Anfragen und Antworten), die es ermöglichen, HTTP-Nachrichtenobjekte auf eine standardisierte Weise zu erstellen und zu manipulieren. Dies ist besonders nützlich für die Entwicklung von HTTP-Client- und Server-Bibliotheken.
PSR-11: Container Interface: Definiert ein Interface für Dependency Injection Container, um die Austauschbarkeit von Container-Implementierungen zu ermöglichen.
PSR-12: Extended Coding Style Guide: Eine Erweiterung von PSR-2, die zusätzliche Regeln und Richtlinien für den Coding-Style in PHP-Projekten bietet.
Die Einhaltung von PSRs hat mehrere Vorteile:
Ein Beispiel für PSR-4 Autoloading-Konfiguration in composer.json
:
{
"autoload": {
"psr-4": {
"MyApp\\": "src/"
}
}
}
Dies bedeutet, dass Klassen im Namespace MyApp
im Verzeichnis src/
gesucht werden. Wenn Sie also eine Klasse MyApp\ExampleClass
haben, sollte die Datei src/ExampleClass.php
enthalten.
PSRs sind ein wesentlicher Bestandteil moderner PHP-Entwicklung und helfen dabei, einen einheitlichen und professionellen Entwicklungsstandard aufrechtzuerhalten.
Guzzle ist eine HTTP-Client-Bibliothek für PHP. Sie ermöglicht es Entwicklern, HTTP-Anfragen in PHP-Anwendungen einfach zu senden und zu empfangen. Guzzle bietet eine Reihe von Funktionen, die das Arbeiten mit HTTP-Anfragen und -Antworten erleichtern:
Einfache HTTP-Anfragen: Guzzle ermöglicht es, GET-, POST-, PUT-, DELETE- und andere HTTP-Anfragen einfach zu senden.
Synchron und asynchron: Anfragen können sowohl synchron als auch asynchron gestellt werden, was eine flexiblere und effizientere Handhabung von HTTP-Anfragen ermöglicht.
Middleware-Unterstützung: Guzzle unterstützt Middleware, die es ermöglicht, Anfragen und Antworten zu modifizieren, bevor sie gesendet oder verarbeitet werden.
Integration mit PSR-7: Guzzle ist vollständig mit PSR-7 (PHP Standard Recommendation 7) konform, was bedeutet, dass es HTTP-Nachrichtenobjekte verwendet, die mit PSR-7 kompatibel sind.
Einfache Fehlerbehandlung: Guzzle bietet Mechanismen zur Behandlung von HTTP-Fehlern und Ausnahmen.
HTTP/2 und HTTP/1.1 Unterstützung: Guzzle unterstützt sowohl HTTP/2 als auch HTTP/1.1.
Ein einfaches Beispiel für die Verwendung von Guzzle zum Senden einer GET-Anfrage könnte so aussehen:
require 'vendor/autoload.php';
use GuzzleHttp\Client;
$client = new Client();
$response = $client->request('GET', 'https://api.example.com/data');
echo $response->getStatusCode(); // 200
echo $response->getBody(); // Antwortinhalt
In diesem Beispiel wird eine GET-Anfrage an https://api.example.com/data
gesendet und die Antwort wird verarbeitet.
Guzzle ist eine weit verbreitete und leistungsstarke Bibliothek, die in vielen PHP-Projekten zum Einsatz kommt, insbesondere dort, wo eine robuste und flexible HTTP-Client-Funktionalität erforderlich ist.
Swoole ist eine leistungsstarke Erweiterung für PHP, die asynchrone I/O-Operationen und Coroutines unterstützt. Sie wurde entwickelt, um die Performance von PHP-Anwendungen erheblich zu verbessern, indem sie es ermöglicht, hochperformante, asynchrone und parallele Netzwerkanwendungen zu erstellen. Swoole erweitert die Fähigkeiten von PHP über das hinaus, was mit herkömmlichen synchronen PHP-Skripten möglich ist.
Asynchrone I/O:
Hohe Leistung:
HTTP Server:
Task Worker:
Timer und Scheduler:
<?php
use Swoole\Http\Server;
use Swoole\Http\Request;
use Swoole\Http\Response;
$server = new Server("0.0.0.0", 9501);
$server->on("start", function (Server $server) {
echo "Swoole HTTP server is started at http://127.0.0.1:9501\n";
});
$server->on("request", function (Request $request, Response $response) {
$response->header("Content-Type", "text/plain");
$response->end("Hello, Swoole!");
});
$server->start();
In diesem Beispiel:
Swoole stellt eine signifikante Erweiterung der Möglichkeiten von PHP dar und ermöglicht es Entwicklern, Anwendungen zu erstellen, die weit über die traditionellen Einsatzmöglichkeiten von PHP hinausgehen.
In der Informatik bezieht sich Idempotenz auf die Eigenschaft bestimmter Operationen, dass die wiederholte Anwendung derselben Operation das gleiche Ergebnis liefert wie eine einmalige Anwendung. Diese Eigenschaft ist besonders wichtig in der Softwareentwicklung, insbesondere bei der Gestaltung von Web-APIs, verteilten Systemen und Datenbanken. Hier sind einige spezifische Beispiele und Anwendungen von Idempotenz in der Informatik:
HTTP-Methoden:
Datenbankoperationen:
UPDATE users SET last_login = '2024-06-09' WHERE user_id = 1;
. Das Ausführen dieses Statements mehrmals ändert den last_login
-Wert nicht mehr, als wenn es nur einmal ausgeführt würde.Verteilte Systeme:
Funktionale Programmierung:
Die Sicherstellung der Idempotenz von Operationen ist in vielen Bereichen der Informatik von großer Bedeutung, da sie die Robustheit und Zuverlässigkeit von Systemen erhöht und die Komplexität der Fehlerbehandlung reduziert.