Читать книгу API-Design - Kai Spichale - Страница 8
На сайте Литреса книга снята с продажи.
Inhaltsverzeichnis
ОглавлениеTeil IGrundlagen
1Application Programming Interfaces – eine Einführung
1.1Eine kurze Geschichte der APIs
1.2Web-APIs ab dem Jahr 2000
1.3API-Definition
1.4Vorteile einer API
1.5Nachteile einer API
1.6API als Produkt
1.7Welche Strategien verfolgen Unternehmen mit APIs?
1.8Zusammenfassung
2Qualitätsmerkmale
2.1Allgemeine Qualitätsmerkmale
2.2Benutzbarkeit
2.2.1Konsistent
2.2.2Intuitiv verständlich
2.2.3Dokumentiert
2.2.4Einprägsam und leicht zu lernen
2.2.5Lesbaren Code fördernd
2.2.6Schwer falsch zu benutzen
2.2.7Minimal
2.2.8Stabil
2.2.9Einfach erweiterbar
2.3Konnaszenz
2.4Zusammenfassung
3Allgemeines Vorgehen beim API-Design
3.1Überblick
3.2Heuristiken und Trade-offs
3.3Anforderungen herausarbeiten
3.4Wenn Use Cases nicht ausreichen
3.5Entwurf mit Szenarien und Codebeispielen
3.6Spezifikation erstellen
3.7Reviews und Feedback
3.8Wiederverwendung
3.9Zusammenfassung
Teil IIJava-APIs
4Ausprägungen
4.1Implizite Objekt-API
4.2Utility-Bibliothek
4.3Service
4.4Framework
4.5Eine Frage der Priorität
4.6Zusammenfassung
5Grundlagen für Java-APIs
5.1Auswahl passender Namen
5.1.1Klassennamen
5.1.2Methodennamen
5.1.3Parameternamen
5.1.4Ubiquitäre Sprache
5.1.5Fazit
5.2Effektiver Einsatz von Typen
5.2.1Semantischen Vertrag minimieren
5.2.2Semantische Verletzung der Datenkapselung vermeiden
5.2.3Werden Namen überschätzt?
5.2.4Fazit
5.3Techniken für Objektkollaboration
5.3.1Tell, Don’t Ask
5.3.2Command/Query Separation
5.3.3Law of Demeter
5.3.4Platzierung von Methoden
5.3.5Fazit
5.4Jigsaw-Module
5.5Minimale Sichtbarkeit
5.5.1Jigsaw-Module
5.5.2Packages
5.5.3Klassen
5.5.4Methoden
5.5.5Felder
5.5.6Fazit
5.6Optionale Hilfsmethoden
5.6.1Komfort
5.6.2Utility-Klassen
5.6.3Fazit
5.7Optionale Rückgabewerte
5.7.1Ad-hoc-Fehlerbehandlung
5.7.2Null-Objekte
5.7.3Verwendung der Klasse java.util.Optional
5.7.4Fazit
5.8Exceptions
5.8.1Ausnahmesituationen
5.8.2Checked Exception versus Unchecked Exception
5.8.3Passende Abstraktionen
5.8.4Dokumentation von Exceptions
5.8.5Vermeidung von Exceptions
5.8.6Fazit
5.9Objekterzeugung
5.9.1Erzeugungsmuster der GoF
5.9.2Statische Factory-Methode
5.9.3Builder mit Fluent Interface
5.9.4Praktische Anwendung der Erzeugungsmuster
5.9.5Fazit
5.10Vererbung
5.10.1Ansätze zum Einsatz von Vererbung
5.10.2Stolperfallen bei Vererbung
5.10.3Bedeutung für API-Design
5.10.4Fazit
5.11Interfaces
5.11.1Typen nachrüsten
5.11.2Unterstützung für nicht triviale Interfaces
5.11.3Markierungsschnittstellen
5.11.4Funktionale Interfaces
5.11.5Fazit
5.12Zusammenfassung
6Fortgeschrittene Techniken für Java-APIs
6.1Fluent Interface
6.1.1DSL-Grammatik
6.1.2Schachteln versus Verketten
6.1.3Fluent Interface von jOOQ
6.1.4Ist der Aufwand gerechtfertigt?
6.1.5Fazit
6.2Template-Methoden
6.2.1API versus SPI
6.2.2Erweiterbare Parameter
6.2.3Fazit
6.3Callbacks
6.3.1Synchrone Callbacks
6.3.2Asynchrone Callbacks
6.3.3Fazit
6.4Annotationen
6.4.1Auswertung zum Kompilierzeitpunkt
6.4.2Auswertung zur Laufzeit
6.4.3Fazit
6.5Wrapper-Interfaces
6.5.1Proxy
6.5.2Adapter
6.5.3Fassade
6.5.4Fazit
6.6Immutability
6.6.1Wiederverwendung
6.6.2Thread-Sicherheit
6.6.3Einfachheit
6.6.4Umsetzung
6.6.5Automatische Überprüfung mit dem Mutability Detector
6.6.6Codegenerierung mit Immutables
6.6.7Fazit
6.7Thread-sichere APIs
6.7.1Vorteile
6.7.2Nachteile
6.7.3Was bedeutet Thread-Sicherheit?
6.7.4Fazit
6.8Zusammenfassung
7Kompatibilität von Java-APIs
7.1Kompatibilitätsstufen
7.1.1Code-Kompatibilität
7.1.2Binäre Kompatibilität
7.1.3Funktionale Kompatibilität
7.2Verwandtschaftsbeziehungen
7.3Design by Contract
7.4Codeänderungen
7.4.1Package-Änderungen
7.4.2Interface-Änderungen
7.4.3Klassenänderungen
7.4.4Spezialisierung von Rückgabetypen
7.4.5Generalisierung von Parametertypen
7.4.6Generics
7.4.7Ausnahmen
7.4.8Statische Methoden und Konstanten
7.5Praktische Techniken für API-Änderungen
7.6Test Compatibility Kit
7.7Zusammenfassung
Teil IIIRemote-APIs
8Grundlagen RESTful HTTP
8.1REST versus HTTP
8.2REST-Grundprinzipien
8.3Ressourcen – die zentralen Bausteine
8.4HTTP-Methoden
8.5HATEOAS
8.6Zusammenfassung
9Techniken für Web-APIs
9.1Anwendungsbeispiel: Onlineshop
9.2URI-Design
9.3Medientypen
9.4Fehlerbehandlung
9.5Versionierung
9.5.1Daten- und Sprachversionierung
9.5.2Kompatibilität und Perspektive
9.5.3Versionsidentifikation
9.6Sicherheitsmechanismen
9.7Partielle Rückgaben
9.8GraphQL
9.9OData
9.10Zusammenfassung
10SOAP-Webservices
10.1SOAP-Grundlagen
10.2WSDL-Grundlagen
10.3Entwurfsansätze und -muster
10.4Versionierung
10.5SOAP versus REST
10.6Zusammenfassung
11Messaging
11.1Routenplanung für Lkw-Transporte (Teil 1)
11.2Message Broker
11.3Produkte
11.4Standards und Protokolle
11.5Routenplanung für Lkw-Transporte (Teil 2)
11.6Transaktionen und garantierte Nachrichtenzustellung
11.7Asynchrone Verarbeitung und REST
11.8Push Notifications
11.9Zusammenfassung
Teil IVÜbergreifende Themen
12Dokumentation
12.1Motivation
12.2Zielgruppen unterscheiden
12.3Allgemeiner Aufbau
12.4Beispiele
12.5Dokumentation von Java-APIs
12.6Dokumentation von Web-APIs
12.7Zusammenfassung
13Caching
13.1Anwendungsfälle
13.2Performance-Vorteil
13.3Verdrängungsstrategien
13.4Cache-Strategien für Schreibzugriffe
13.5Cache-Topologien für Webanwendungen
13.6HTTP-Caching
13.7Zusammenfassung
14Skalierbarkeit
14.1Anwendungsfall
14.2Grundlagen
14.3Load Balancing
14.4Statuslose Kommunikation
14.5Skalierung von Datenbanken
14.6Skalierung von Messaging-Systemen
14.7Architekturvarianten
14.8Zusammenfassung
15Erweiterte Architekturthemen
15.1Consumer-Driven Contracts
15.2Backends for Frontends
15.3Vernachlässigte Frontend-Architektur
15.4Netflix-APIs
15.5Zusammenfassung
16API-Management
16.1Überblick
16.2Funktionen einer API-Management-Plattform
16.3API-Management-Architektur
16.4Open-Source-Gateways
16.5Zusammenfassung
Anhang
ALiteraturverzeichnis
Index