Zu diesem Buch – sowie zu vielen weiteren O’Reilly-Büchern – können Sie auch das entsprechende E-Book im PDF-Format herunterladen. Werden Sie dazu einfach Mitglied bei oreilly.plus+: www.oreilly.plus |
3., aktualisierte Auflage
Server-Anwendungen, Web APIs, SPAs & HTML-Cross-Platform-Anwendungen mit ASP.NET, ASP.NET Core, JavaScript, TypeScript & Angular
Holger Schwichtenberg und Jörg Krause
Lektorat: Ariane Hesse
Korrektorat: Claudia Lötschert, www.richtiger-text.de
Satz: Gerhard Alfes, mediaService, Siegen, www.mediaservice.tv
Herstellung: Stefanie Weidner
Umschlaggestaltung: Michael Oréal, www.oreal.de
Bibliografische Information Der Deutschen Nationalbibliothek
Die Deutsche Nationalbibliothek verzeichnet diese Publikation in der Deutschen Nationalbibliografie; detaillierte bibliografische Daten sind im Internet über http://dnb.d-nb.de abrufbar.
ISBN:
Print 978-3-96009-015-1
PDF 978-3-96010-258-8
ePub 978-3-96010-259-5
mobi 978-3-96010-260-1
Dieses Buch erscheint in Kooperation mit O’Reilly Media, Inc. unter dem Imprint »O’REILLY«. O’REILLY ist ein Markenzeichen und eine eingetragene Marke von O’Reilly Media, Inc. und wird mit Einwilligung des Eigentümers verwendet.
3., aktualisierte Auflage 2018
Copyright © 2018 dpunkt.verlag GmbH
Wieblinger Weg 17
69123 Heidelberg
Die vorliegende Publikation ist urheberrechtlich geschützt. Alle Rechte vorbehalten. Die Verwendung der Texte und Abbildungen, auch auszugsweise, ist ohne die schriftliche Zustimmung des Verlags urheberrechtswidrig und daher strafbar. Dies gilt insbesondere für die Vervielfältigung, Übersetzung oder die Verwendung in elektronischen Systemen.
Es wird darauf hingewiesen, dass die im Buch verwendeten Soft- und Hardware-Bezeichnungen sowie Markennamen und Produktbezeichnungen der jeweiligen Firmen im Allgemeinen warenzeichen-, marken- oder patentrechtlichem Schutz unterliegen.
Die Informationen in diesem Buch wurden mit größter Sorgfalt erarbeitet. Dennoch können Fehler nicht vollständig ausgeschlossen werden. Verlag, Autoren und Übersetzer übernehmen keine juristische Verantwortung oder irgendeine Haftung für eventuell verbliebene Fehler und deren Folgen.
Vorwort zur 3. Auflage
Warum dieses Buch?
Was ist der Inhalt dieses Buchs?
Welche Voraussetzungen sollten Sie für dieses Buch mitbringen?
Was ist das Ziel des Buchs?
Welche Versionen werden in diesem Buch behandelt?
Welche Programmiersprache wird in diesem Buch verwendet?
Welche Werkzeuge werden in diesem Buch verwendet?
Welche Sprachversion wird in diesem Buch verwendet?
Woher bekommen Sie die Code-Beispiele und die drei Bonuskapitel zu diesem Buch?
Wem ist zu danken?
Die Autoren
Teil AWeb-Basiswissen
1Protokolle, Standards und Konzepte
Standardisierung
RFCs
World Wide Web Consortium (W3C)
European Computer Manufacturers Association (ECMA)
Hypertext Transfer Protocol (HTTP)
Protokollaufbau, Header, Body
Kommandoaufbau
Die HTTP-Statuscodes
Ablauf einer HTTP-Kommunikation
Kopffelder
HTTP 2.0
Ergänzende Standards zu HTTP
Web-Sockets
WebDAV
Simple Mail Transfer Protocol (SMTP) oder Extended SMTP (ESMTP)
File Transfer Protocol (FTP)
REpresentational State Transfer (REST)
Webdienste
Merkmale
REST-Beispiel
URI
HTTP-Methoden für REST
Multipurpose Internet Mail Extensions (MIME)
JavaScript Object Notation (JSON)
Atom Syndication Format (ATOM)
Grenzen von REST: GraphQL und OData
Single Page Application (SPA)
Asynchronous JavaScript and XML (AJAX)
Responsive Web Design (RWD)
2Hypertext Markup Language (HTML)
Grundlagen HTML
Geschichte
XML – Grundlage für HTML
Markup
XML-Dokumente
Verarbeitung
Der Begriff »Markup«
Seitenaufbau
Document Object Model (DOM)
Der Dokumenttyp (Doctype)
Codierungen
HTML5-Seitenstruktur
Elemente der Seite
Textelemente
Fließtextauszeichnung
Verweise
Tabellen
Multimedia und Grafiken
Formulare
Skripte
Interaktive Elemente
Allgemeine und universelle Attribute
id
class
accesskey
contenteditable
contextmenu
dir
draggable
dropzone
hidden
lang
spellcheck
style
tabindex
title
3Cascading Style Sheets (CSS)
Grundlagen
Syntax
Selektor
Elemente (Tags)
ID
Klassen
Attribute
Logische Auswahl
Weitere Selektoren
Das Box-Modell
Bausteine der Box
Zählweise
Ausnahmen
Das Box-Modell in CSS3
Das Flexbox-Modell
Prinzipien
Eigenschaft der Container
Beachtung von Medien
Syntax
Parameter
Der Viewport
Viewport einstellen
Parameter für den Viewport
Einheiten
Absolute Einheiten
Relative Einheiten
4Bootstrap
Einführung in Bootstrap
Neuerungen in Bootstrap 4
Installation
Struktur der CSS-Dateien
Seitenaufbau
Browserunterstützung
ARIA
Optimierung
Hilfsklassen
Reboot
Struktur der Seite
Einführung
Das Rastersystem
Das Flex-Raster
Typografie
Überschriften
Text und Textelemente
Listen
Tabellen
Hilfsklassen
Formulare
Struktur eines Formulars
Eingabeelemente
Schaltflächen
Weitere Bausteine
Symbole
Responsive Bilder
Eingebettete Quellen
Farben und Hintergründe
Ausrichtung von Elementen im Fluss
Inhalte anzeigen und verstecken
Komponenten
Klappmenüs (dropdown)
Werkzeugleisten (toolbar)
Schaltfläche mit Menü (button group)
Navigation (nav, navbar)
Pfadnavigation (breadcrumb)
Seitenweises Blättern (pagination)
Kennzeichnungen (tag)
Großbildleinwand (jumbotron)
Seitenüberschriften (page header)
Meldungen (alert)
Fortschrittsbalken (progress)
Medien (media)
Allgemeine Listen (list group)
Karten (cards)
Aktive Komponenten
Einrichtung und Aktivierung
Die Programmierschnittstelle
Übergänge (transition)
Modale Dialoge (modals)
Klappmenü (dropdown)
Scrollbar-Überwachung (scrollspy)
Angeheftete Navigation (affix)
Umschaltbare Tabulatoren (tab)
Tooltips (tooltip)
Inhaltsüberlagerung (popover)
Meldungen (alert)
Interaktive Schaltflächen (button)
Inhaltseinblendung (collapse)
Bilderkreisel (carousel)
Teil BWebserverprogrammierung mit ASP.NET
5ASP.NET MVC
Geschichte und Verbreitung von ASP.NET
Architektur von ASP.NET MVC
Erste Schritte mit ASP.NET MVC
ASP.NET-MVC-Projekt anlegen
Projektaufbau
Nuget-Pakete
Controller anlegen
View anlegen
Webanwendung testen
Einträge editieren
Vorschlagswerte über Drop-down-Listenfelder anbieten
Controller
Models entgegennehmen
View auswählen
Auf Ausnahmen reagieren
URL-Mapping beeinflussen (Routing)
Asynchrone Controller
Vereinfachte Implementierung asynchroner Controller seit .NET 4.5
Views
Razor
Razor-Helper
Layoutseiten
Partielle Views
Vorlagen für Felder und Models
Views für mobile Anwendungen
Zwischen unterschiedlichen Ansichten wechseln
Minification und Bundling
Models
Metadaten im Model festlegen
HTML-Text übermitteln
Validieren von Benutzereingaben
Globalisierung
Sprach- und Ländereinstellungen festlegen
Über Ressourcedateien mehrsprachige Inhalte bereitstellen
Codierung festlegen
Areas
Filter
Überblick
Umsetzung
Filter auf Controller und Action-Methoden anwenden
Globale Filter
Authentifizierungsfilter
6ASP.NET Web API
Einen einfachen HTTP-Service erstellen
Parameter und Rückgabewerte
HTTP-Services konfigurieren
HTTP-Services mit Fiddler testen
Mehr Kontrolle über HTTP-Nachrichten
Antworten mit HttpResponseMessage beeinflussen
Anfragen als HttpRequestMessage darstellen
HttpRequestMessage und HttpResponseMessage am Beispiel Conditional Get
Antworten über IHttpActionResult zurückgeben
HTTP-Services über HttpClient konsumieren
Routing
Benutzerdefinierte Routen über die Konfiguration festlegen
Attributbasiertes Routing
Weiterführende Schritte mit der Web API
Dynamische Parameter
Tracing
Request Batching
Cross Origin Resource Sharing (CORS)
Validieren
Querschnittsfunktionen implementieren
Message-Handler
Filter
Filterüberschreibungen
Benutzerdefinierte Formate unterstützen
Formatter implementieren
Formatter mit HttpClient verwenden
Serialisierung beeinflussen
JSON-Serializer konfigurieren
XML-Serializer konfigurieren
Eigenschaften von der Serialisierung ausschließen
Zirkuläre Referenzen serialisieren
Binary JSON (BSON)
Web API und HTML-Formulare
Einfache Formularfelder übermitteln
Datei-Upload via HTML-Formular
Fortschritt ermitteln
Feingranulare Konfiguration
Controllerbasierte Konfiguration
Routenbasierte Konfiguration
7ASP.NET SignalR
Long-Polling
Web-Sockets
Überblick über ASP.NET SignalR
PersistentConnection
Erste Schritte mit SignalR und PersistentConnection
Lifecycle-Methoden
URL-Mapping für persistente Verbindungen
Einfacher Client für eine persistente Verbindung
Einfacher JavaScript-Client für eine persistente Verbindung
Hubs
Methoden und Callbacks mit SignalR und Hubs
URL-Mapping für Hubs
Lifecycle-Methoden
Hubs konsumieren
Hubs über JavaScript konsumieren
Gruppen
Pipeline-Module für Querschnittsfunktionen
SignalR konfigurieren
Cross Origin Resource Sharing (CORS)
SignalR skalieren
Überlegungen zum Skalieren von SignalR
SignalR mit SQL Server skalieren
Implementierung eines SignalR-Clients
Das Skalierungsszenario testen
Azure Service Bus und Redis als Alternative zu SQL Server
8ASP.NET-Programmierschnittstellen
Direkt mit HTTP interagieren
HttpContext
Server (HttpServerUtility)
Request (HttpRequest)
Response (HttpResponse)
Zustandsverwaltung auf Sitzungsebene
Überblick
Weitere Optionen
Programmieren mit dem Sitzungszustand
URL-basierte Sitzungsverwaltung ohne Cookies
Konfiguration des Sitzungszustands
Speicherort der Sitzungstabelle wählen
Komprimierung des Sitzungszustands
Deaktivieren des Sitzungszustands
Caching
Überblick
Pro und Contra der Zwischenspeicherung
Zwischenspeicherung ganzer Seiten (Output-Caching)
Caching von Seitenteilen (Fragmentzwischenspeicherung)
Programmatisches Caching
Cacheinvalidierung
Teil CWebserverprogrammierung mit ASP.NET Core
9Einführung in ASP.NET Core
Klassisches ASP.NET oder ASP.NET Core?
Einführung in die Core-Welt
.NET Standard
Windows Compatibility Pack für .NET Core
Open Source
Dokumentation
Werkzeuge
Kommandozeilenwerkzeug dotnet
Editoren
Erste Schritte mit ASP.NET Core (auf .NET Core)
Installation
Projekt anlegen
Projektaufbau
Die Klasse Program
Klasse Startup und Middleware
Referenzen/Pakete
Übersetzen und Debugging
Deployment
ASP.NET Core auf dem klassischen .NET Framework
Einsatzszenarien
Anlegen von ASP.NET-Core-Projekten mit dem klassischen .NET Framework
Projektaufbau
Referenzen/Pakete
Deployment
In ASP.NET Core integrierte Webserver: Kestrel versus HTTP.sys (WebListener)
Kestrel
HTTP.sys
10ASP.NET Core MVC und Razor Pages
POCO-Controller
Controller und View
Tag Helper
Wie funktionieren Tag Helper?
Eingebaute Tag Helper
Eigene Tag Helper
Beispiel: Tag <autor>
Beispiel: Tag <row>
Beispiel: Tag <condition>
Beispiel: Tag <repeater>
View Components
Razor Pages
Von Webforms über MVC zu Razor Pages
Razor Pages versus MVC
Page Model als Code-Behind
URL-Parameter
Eingebaute Objekte
Datenbindung
Praxisbeispiel zu Razor Pages
Drittanbieterkomponenten für ASP.NET Core
11ASP.NET-Core-Klassenbibliotheken
Dependency Injection in ASP.NET Core
Implementierung eines Diensts
Registrierung von Diensten
Injektion in einen Konstruktor
Manuelle Beschaffung
Injektion in eine View
Vordefinierte Dienste der ASP.NET-Core-Infrastruktur
Konfiguration in ASP.NET Core
Sitzungen in ASP.NET Core
Cookies
URL-Rewriting in ASP.NET Core
Benutzerverwaltung und Authentifizierung
12ASP.NET Core Web APIs
Die Grundlagen von ASP.NET Core Web API
Abfragen von Daten
Arbeiten mit Statuscodes
Anlegen, Aktualisieren und Löschen von Daten
Nutzung von Sub-Routen für Teil-Ressourcen
Nutzung weiterer Model-Binding-Funktionen
Anbieten unterschiedlicher Repräsentationen von Ressourcen
Nutzung des PATCH-Verbs mit JSON-Patch
Cross Origin Resource Sharing
Bereitstellung von OpenAPI-Beschreibungen über Swagger
Starten von Hintergrundprozessen über IHostedService
Integrationstests mithilfe des TestHosts
Service-Kommunikation mit HttpClient
Abfragen von Daten
Versenden von Daten und Reaktion auf Statuscodes
Arbeiten mit Headern und HttpRequestMessage
Generieren von Clients für Swagger-Spezifikationen
Ausblick auf Neuerungen durch ASP.NET Core 2.1
Annotation [ApiController]
ActionResult<T>-Rückgabewerte
Optimierte Input-Verarbeitung
13Microservices mit ASP.NET Core Web API und RabbitMQ
Grundlagen von Microservices
Mögliche Vorteile von Microservices
Mögliche Nachteile von Microservices
Modellierung von Microservices
Integration und Kommunikation von Microservices
Synchrone und asynchrone Kommunikation
Messaging-basierte versus Request-Response-Kommunikation
Gesteuerte (orchestriert) versus Event-getriebene Kommunikation (choreografiert)
.NET-Core-Technologien zur Umsetzung von Service-Kommunikation
Asynchrone Service-Kommunikation über RabbitMQ
Microservices-Fallstudie
Umgebung und fachlicher Kontext
Der HumanResourcesService
Der ProjectsService
Der ManagementDashboardService
Der InvoicingService
Fazit
Nützliche Patterns und Best-Practices im Bereich Microservices
Resilienz-Patterns
Serviceübergreifender Code und serviceübergreifende Funktionen
14ASP.NET Core SignalR
Hub-Klassen
Hub-Client mit .NET Core 2.1
Hub-Client mit Angular
Serverseitig initiierte Benachrichtigungen und Gruppen
Teil DWeb-Client-Programmierung
15JavaScript-Grundlagen
Grundlagen der Sprache
Sprachmerkmale und Entwurfsmuster
Vergleich mit Programmiersprachen
JavaScript-Syntax
Typen
Objekte
Symbole
Arrays
Operatoren
Anweisungen – Statements
Fehlerbehandlung
Variablen und Scope
Objektorientierung
Erstellen von Objekten
Klassen
Statische Mitglieder
Vererbung
Exkurs Objekthierarchie
Ableiten von internen Typen
Tipps zum Umgang mit objektorientierten Techniken
Globale Standardfunktionen
Timer-Funktionen
Prüffunktionen
Konvertierungsfunktionen
Module
Entwurfsmuster
Module
Funktionen
Pfeilfunktionen (Lambdas)
Erweiterte Objektliterale
Destrukturierung
Umgang mit Argumenten
Generatoren und Iteratoren
Asynchrone Programmierung
Klassische asynchrone Programmierung
Promise
Set und Map
Set
Map
Schlüsselvergleiche
Iteratoren
WeakMap und WeakSet
Reguläre Ausdrücke
Einführung
Kopieren oder Konstruieren?
Und wie funktioniert das?
Gruppierungen
Vorwärtsreferenzen
Die JavaScript-Funktionen
Zusammenfassung
Reflektions-API
Einfache Methoden
Reflect
Erzeugerfunktionen
Operatoren für Schlüsselwörter
Dynamische Argumentlisten
Funktionsaufrufe
Proxy-Fallen
Zusammenfassung der Reflect-Methoden
Stellvertreter: Proxies
Einführung
Proxy-Fallen anwenden
Schemaprüfung mit Proxies
Entfernbare Proxies
Übersicht
16TypeScript
Geschichte von TypeScript
Open-Source-Projekt
TypeScript-Compiler
Übersetzung von TypeScript in JavaScript
TypeScript Playground
TypeScript in Visual Studio
TypeScript-Kommandozeilencompiler tsc
TypeScript in Visual Studio Code
TypeScript in Gulp
Datentypen
Arrays und Tupel
Klassen
Generische Klassen
Strukturelle Typäquivalenz (Duck Typing)
Funktionen und Lambda-Ausdrücke
Dekoratoren
Module und Verweise
TypeScript ohne externes Modulsystem (interne Module)
Externe Module
Re-Export
Deklarationsdateien
Einbindung von Deklarationsdateien (altes Verfahren)
Import von Deklarationsdateien
Deklarationsdateien und tsconfig.js
Mixins
Mixin-Konstruktortypen
Deklaratives Mischen
Module mischen
Nicht mögliche Vermischungen
Reflektion: Metadaten per Programmcode
Die Metadaten-API für Reflektion
Ermitteln von Typinformationen
Ermitteln von Parameterinformationen
Ermitteln von Rückgabeinformationen
Asynchrone Programmierung
Generatoren und Iteratoren
Iteratoren
Generatoren
Asynchrone Iteration
Asynchrone Generatoren
17Angular
Ziele und Architektur von Angular
Browserunterstützung
Veröffentlichungszyklus von Angular
Dokumentation
Beispielsammlung
Komponenten
Datenbindung und Pipes
Syntaxübersichten
Strukturelle Direktiven
Datenbindungssyntax
Angular-Pipes
Module
Formulare
Routing
Dienste und Dependency Injection
Animationen
Werkzeuge
JiT vs. AOT
Angular Universal
18ASP.NET Blazor
Silverlight wurde eingestellt
Web Assembly
Architektur von Blazor
Erste Schritte mit ASP.NET Blazor
Beispielprojekt
Weitere Möglichkeiten
Ausblick
Teil EHosting von ASP.NET und ASP.NET Core
19Internet Information Services (IIS)
Versionsgeschichte
Kernfunktionen des IIS
Installation des IIS
Modularisierung
Skriptbasierte Installation
Integration zwischen ASP.NET und IIS
Test der Installation
IIS Express
IIS-Administration
IIS-Manager
Administration per Kommandozeile und Skript
IIS-Websites (virtuelle Webserver)
Websites erstellen
Websites erstellen per Skript
Wichtige Einstellungen für Websites
Beschränken der möglichen Clients
Authentifizierung
Transport Layer Security (TLS)/Secure Socket Layer (SSL)
Server für Nicht-HTTP-Protokolle
Virtuelle Verzeichnisse im IIS
IIS-Anwendungen
Rahmenbedingungen einer IIS-Anwendung
Anlegen einer IIS-Anwendung
IIS-Anwendungspools
Eigenschaften eines Anwendungspools
Liste der Anwendungspools
Zuordnung von Websites und IIS-Anwendungen zu Anwendungspools
ASP.NET-Version
Erweiterte Einstellungen für Anwendungspools
Anwendungspoolidentität
Wiederverwendung (Recycling)
Leistungseinstellungen
Zustandsüberwachung
Besonderheiten für ASP.NET-Anwendungen
IIS-Autostart
IIS-Verarbeitungspipeline
20Microsoft Azure
Azure-Konzepte
Anlegen einer Subscription
Anlegen einer Ressource Group
Anlegen eines App Service Plans
Anlegen eines Azure App Service
Anlegen eines Azure App Service mit der PowerShell
21Verteilen von Webanwendungen aus Visual Studio heraus
Web Deploy-Werkzeug
Web Deploy in einen IIS-Webserver
Web Deploy nach Azure
Konfigurationstransformationen
Erstellen der Transformationsdateien
Syntax der Transformationsdateien
Ergebnis der Transformation
Continuous Integration und Continuous Delivery
22Webanwendungen in Docker
Docker auf Windows
Installation der Docker-Unterstützung von Microsoft
Installation von Docker for Windows
Ein Image beschaffen
Einen Container starten
Ein Visual-Studio-Container-Projekt erstellen
Debugging eines Containers
Verwendung des Containers
Images aus Containern erstellen
.NET Core-Container
Container in Windows Server 2016 hosten
Images verbreiten
Teil FFallbeispiel: MiracleList
23Das Fallbeispiel »MiracleList«
Das Szenario
Links
24Das MiracleList-Backend
Architektur
Entitätsklassen
Entity Framework Core-Kontextklasse
Lebensdauer der Kontextklasse in ASP.NET Core-Anwendungen
Geschäftslogik
Web API
25MiracleList-Web-Client
Technikeinsatz im Web-Client
Angular-CLI
Webserver starten
Zusatzkomponenten
Proxy für REST-Dienste
Daten darstellen
Navigation zu den Aufgaben
Datumsanzeigen
Zeilenumbrüche
Aufgabenstatus ändern
Aufgaben anlegen
Suchfunktion
Komponentenbildung
Schritt 1: Routing-Modul
Schritt 2: Kommunikationsdienst
Schritt 3: Teilaufgabenliste in SubTaskList-Komponente
Schritt 4: Auslagerung in TaskView
Schritt 5: Aufgaben bearbeiten
Schritt 6: Integration in AppComponent
Datepicker
Kontextmenü verwenden
Nachfragen beim Löschen
Animationen
Sortieren der Aufgabenliste
Benutzeranmeldung
Hauptmenü
Testen
Auslieferung
26MiracleList-Electron-Client
Hybride Apps
Architektur von Electron
Electron-Projekt anlegen
Kommunikation zwischen Main und Renderer
Erweiterungen in der Webanwendung
Start der Electron-Anwendung
Debugging
Deployment
27MiracleList-Cordova-Client
Architektur von Cordova
Cordova-Projekt anlegen
Cordova-Anwendung starten
Erweiterungen in der Webanwendung
Cordova-APIs verwenden
Plug-ins verwenden
Responsive Web Design mit Bootstrap
Index
Liebe Leserinnen und Leser,
herzlichen willkommen zur dritten, erheblich erweiterten Auflage dieses Buchs.
Das Web hat sich verändert. Während für gute Webanwendungen vor rund zehn Jahren noch die Regel galt, so viele Aufgaben wie möglich auf dem Server zu erledigen (Server Side Rendering), wird heutzutage in vielen Fällen die Benutzeroberfläche auf dem Client gerendert (Client Side Rendering – CSR), sodass eine Single Page Application (SPA) entsteht. Der Webserver kommt oft nur noch für das initiale Laden der SPA und zum Datenaustausch via REST-Diensten (WebAPIs) zum Einsatz. Dank Basistechniken wie HTML5/CSS3, der erweiterten JavaScript-Syntax, und vielen neuen Browser-APIs sowie zahlreichen Frameworks, die die Handhabung einfacher machen, sind heutzutage Webanwendungen möglich, die in ihrer Benutzerfreundlichkeit Desktop-Anwendungen nahekommen.
Mittlerweile werden mit Webtechniken nicht nur Browseranwendungen, sondern auch mobile Apps und Desktop-Anwendungen entwickelt. Die Produktkombination aus HTML, CSS und JavaScript ist die einzige echte Cross-Platform-Technik, die die Entwicklung von Oberflächen für alle Betriebssysteme im Sinne von »Write once, run anywhere« ermöglicht.
Trotz des Trends zur Verlagerung des Renderings auf den Client gibt es weiterhin viele Webanwendungen, bei denen mit Server Side Rendering (SSR) gearbeitet wird.
Dieses Buch beschreibt sowohl Server- als auch Clienttechniken für moderne Webanwendungen.
Anders als die Vorlagen beginnt das Buch mit einem Buchteil »Web-Basiswissen«, in dem HTTP, HTML und CSS besprochen werden. Diese Ergänzung findet bewusst statt, weil es Leser-Feedback zu den Vorauflagen gab, dass das Buch Vorwissen in diesen Bereichen voraussetzte. Natürlich kann hier nicht das komplette Wissen zu den Basistechniken des Webs abgedruckt werden. Die Basiskapitel von Jörg Krause geben Ihnen aber ein solides Fundament für den Rest des Buchs.
Serverseitig gab es im Jahr 2016 mit dem Erscheinen von ASP.NET Core einen erheblichen Umbruch, den allerdings viele Unternehmen technisch und/oder organisatorisch noch nicht nachvollziehen können. In diesem Buch wird daher auf der Serverseite sowohl das klassische ASP.NET (MVC, Web API, SignalR) im Buchteil B als auch das neue ASP.NET Core (inkl. MVC, Razor Pages und Web API, SignalR) im Buchteil C besprochen. Ein eigenes Kapitel widmet sich der Entwicklung von Microservices inklusive einer umfangreichen Fallstudie.
Im Buchteil D geht es dann um die Client-Programmierung mit JavaScript und TypeScript sowie die derzeit sehr weit verbreiteten Webframeworks Boostrap (von Twitter) und Angular (von Google). Informationen zu React (von Facebook) finden Sie in Kapitel 30, einem der drei Bonuskapitel, die Sie als Ergänzung des Buchs – so wie im Vorwort beschrieben – herunterladen können.
Ein ganz aktuelles Kapitel zu ASP.NET Blazor ergänzt diesen Buchteil. Auch wenn ASP.NET Blazor noch in einem früheren Entwicklungsstadium steckt, weckt es dennoch bei vielen .NET-Entwicklern die Hoffnung, zukünftig mit C# statt mit JavaScript/TypeScript SPAs im Browser programmieren zu können.
Buchteil E behandelt den Betrieb (das »Hosting«) von Webanwendungen in den Internet Information Services (IIS) von Windows, in Docker-Containern und in Microsoft Azure.
Das Buch beschließt den Buchteil F mit einem größeren Fallbeispiel: MiracleList ist eine moderne, auf Webtechniken basierende Cross-Platform-Anwendung zur Aufgabenverwaltung (in Anlehnung an www.wunderlist.com, für das Microsoft im Jahr 2015 einen dreistelligen Millionenbetrag bezahlt hat). Der Server basiert auf ASP.NET Core und läuft auf Windows, Linux oder macOS. Der Client basiert unter anderem auf HTML, CSS, JavaScript, Angular, Electron und Cordova. Er läuft daher sowohl im Browser als auch in Desktop-Anwendungen auf Windows, Linux oder macOS sowie als mobile App in iOS, Android und Windows Mobile.
Das Buch richtet sich an Softwareentwickler, die bereits grundlegende Erfahrung mit .NET und C# besitzen und nun moderne Webanwendungen entwickeln wollen. Das Buch beinhaltet keine Einführung in .NET und C#, aber es führt in alle notwendigen Webtechniken ein.
Wenn Sie die Programmiersprache C# noch nicht oder noch nicht gut beherrschen, sollten Sie vorab dieses Buch lesen:
Holger Schwichtenberg:
C# 7.2 Crashkurs: Die Syntax der Programmiersprache C# für die Softwareentwicklung in .NET Framework, .NET Core und Xamarin.
www.IT-Visions.de, 2018
1. Auflage 2018
167 Seiten, 15,00 €
ISBN: 978-3-93427-930-8
Zielsetzung dieses Buchs ist es, dem Leser zu zeigen, wie die Techniken eingesetzt werden können, um moderne Webanwendungen zu schaffen. Der Fokus liegt dabei auf den Konzepten, die hinter diesen Techniken stehen. Dazu spielt dieses Buch eine Vielzahl an Beispielen durch.
Es ist nicht Ziel dieses Buchs, ein Nachschlagewerk für die Vielzahl der Sprach- und Syntaxelemente sowie Klassen zu sein. Ein Nachschlagewerk zu all diesen Techniken würde viele Tausend Seiten dick sein. Schon bei der hier vorliegenden Seitenzahl mussten Inhalte gekürzt werden. Auf einige Fakten und Praxisbeispiele, die wir gerne präsentiert hätten, mussten wir daher leider verzichten.
Für eine erschöpfende Auflistung sämtlicher Befehle wird, gerade bei den clientseitigen Technologien, auf die umfangreichen frei verfügbaren Online-Referenzen verwiesen.
Darüber hinaus gehen wir auch davon aus, dass der Leser mit wenig Aufwand herausfinden kann, in welchem Namensraum beziehungsweise in welcher Assembly sich eine erwähnte Klasse befindet, sofern diese nicht ohnehin durch die in Visual Studio verwendeten Vorlagen eingebunden wurde.
Außerdem werden in diesem Buch keine Datenbankzugriffe besprochen. Hierzu sei auf das folgende Buch verwiesen:
Holger Schwichtenberg:
Effizienter Datenzugriff mit Entity Framework Core: Datenbankprogrammierung mit C# für .NET Framework, .NET Core und Xamarin.
Carl Hanser Verlag, 2018
468 Seiten, 42,00 €
ISBN: 978-3-446-44898-8
Das Buch behandelt die zum Redaktionsschluss des Buchs aktuellen stabilen Versionen. Dies sind unter anderem:
Das vorliegende Buch verwendet serverseitig die Programmiersprache C# sowie clientseitig JavaScript und TypeScript.
Alle Leser, die serverseitig lieber mit Visual Basic .NET arbeiten, können die abgedruckten Beispiele sehr einfach mit kostenlosen Werkzeugen nach Visual Basic .NET konvertieren. Informationen dazu findet man unter http://www.dotnetframework.de/tools.aspx.
Dieses Buch bezieht sich primär auf die Programmierung mit der integrierten Entwicklungsumgebung Visual Studio. Von Visual Studio kann man eine kostenfreie Community Edition nur in kleineren Firmen und bei Open-Source-Projekten kostenfrei einsetzen (www.visualstudio.com/vs/community). Für die Webclient-Programmierung kommt auch Visual Studio Code (https://code.visualstudio.com) zum Einsatz. Zudem sollten Sie node.js (nodejs.org) installieren, um den Node Package Manager (NPM) zur Verfügung zu haben. Für das Testen von Web APIs wird Postman (www.getpostman.com) und Fiddler (www.telerik.com/download/fiddler) verwendet. Auf weitere Werkzeuge wird in den einzelnen Kapiteln hingewiesen.
Dieses Buch beschreibt die englische Version von Visual Studio, weil inzwischen viele deutsche Entwickler (einschließlich der Autoren) die englische Version der Software bevorzugen, denn die Übersetzungen ins Deutsche sind oft holprig und die Fehlermeldungen nur schwer verständlich. Visual-Studio-Anwender können über den Befehl Tools/Options/Environment/International Settings weitere Sprachpakete herunterladen und einrichten. Weiterhin sei noch darauf hingewiesen, dass die Anordnung der Menüs und auch einige Tastaturkürzel von den gewählten Einstellungen in Visual Studio abhängen. Alle Ausführungen in diesem Buch beziehen sich auf die Umgebungseinstellung Common Settings, die bei der Installation des Produkts ausgewählt werden kann.
Die Code-Beispiele zu diesem Buch erhalten Sie auf oreilly.de auf der Webseite zum Buch Moderne Webanwendungen für .NET-Entwickler unter »Zusatzmaterial«. Hier finden Sie außerdem drei zusätzliche Kapitel als PDF zum Download, die dieses Buch inhaltlich abrunden: Kapitel 28 »Open Web Interface for .NET (OWIN) und Katana«, Kapitel 29 »Sicherheit in ASP.NET« sowie Kapitel 30 »React«. |
Die Autoren bieten den Leserinnen und Lesern dieses Buchs darüber hinaus im Rahmen einer zugangsbeschränkten Website folgende Serviceleistungen:
Zugang zu der ehrenamtlich betriebenen Leser-Website erhalten Sie unter www.IT-Visions.de/Leser. Dort müssen Sie sich einmalig registrieren. Bei der Registrierung wird ein Losungswort abgefragt, das Sie als Käufer dieses Buchs ausweist. Bitte geben Sie dort Beyond ein. Durch die Registrierung erhalten Sie ein persönliches Kennwort per E-Mail zugesendet, das Sie dann für die Anmeldung nutzen können.
Dieses Symbol weist auf eine Warnung oder ein Problem hin. |
Dieses Symbol markiert einen allgemeinen Hinweis oder Tipp. |
Für ihre Mitwirkung an diesem Buch möchte ich danken:
Essen im Herzen des Ruhrgebiets, im April 2018
Holger Schwichtenberg
Alle Autoren dieses Buchs arbeiten bei der Firma www.IT-Visions.de als Softwarearchitekten, Softwareentwickler, Trainer und Berater für .NET-Techniken. www.IT-Visions.de ist ein Verbund der deutschen Top-Experten im Bereich der Microsoft-Produkte und -Technologien insbesondere .NET. Unter Leitung und Mitwirkung von Dr. Holger Schwichtenberg bietet www.IT-Visions.de:
Die Schwestergesellschaft 5Minds IT-Solutions GmbH & Co. KG bietet Softwareentwicklung (Prototypen und komplette Lösungen) sowie den Verleih von Softwareentwicklern.
Zu den Kunden gehören neben vielen mittelständischen Unternehmen auch Großunternehmen wie z.B. Siemens, Bayer, RWE, Bertelsmann, BASF, Bosch, Thyssen-Krupp, Merkle, Festo, Lufthansa, AIRBUS, REWE, EnBW, DEA, PwC, Deutsche Telekom, Deutsche Post, Karstadt, eurofins, Roche, OSRAM, Jenoptik, Continental, Carl Zeiss, Haufe-Lexware, TÜV, Sartorius, Fraunhofer, diverse Banken und Versicherungen sowie mehrere Landesregierungen.