%Teilweise Erzeugt mit dem LaTeX-Generator: http://latex.sehnot.de

%Schriftgröße, Layout, Papierformat, Art des Dokumentes
\documentclass[10pt,oneside,a4paper]{scrartcl}

%Einstellungen der Seitenränder
\usepackage[left=2cm,right=2cm,top=1.5cm,bottom=1.5cm,includeheadfoot]{geometry}

%neue Rechtschreibung
\usepackage[ngerman]{babel}

%Umlaute ermöglichen
\usepackage[utf8]{inputenc}

%Gesamtseitenzahl
\usepackage{lastpage}

% Kopf- und Fußzeile
\usepackage[automark]{scrpage2}

%Quellcode-Listings
\usepackage{listings}

%Hyperlinks
\usepackage{hyperref}

% Rahmen um Verbatim
\usepackage{fancyvrb}
\usepackage{moreverb}



%Kopfzeile
\ihead{Web}
\chead{}
\ohead{http://kohnlehome.de/html/rest.pdf}
\setheadsepline{0.5pt}

%Fußzeile
\setfootsepline{0.5pt}
\ifoot{Franz Kohnle}
\cfoot{Seite \thepage\ von  \pageref{LastPage}}
\ofoot{\today}

\pagestyle{scrheadings}

\begin{document}

% Überschrift 
\begin{center}
\LARGE % Schriftgröße
\bfseries % Fettdruck
\sffamily % Serifenlose Schrift
REST (Representational State Transfer)
\end{center}

\paragraph*{Dissertation von Roy Fielding} \href{http://www.ics.uci.edu/~fielding/pubs/dissertation/top.htm}{Architectural Styles and
the Design of Network-based Software Architectures}

\section*{Constraints}
\begin{enumerate}
\item Client-Server
	\begin{itemize}
	\item Trennung von User-Interface und Datenspeicher $\Rightarrow$ Unabhängige Entwicklung von Client und Server.
	\end{itemize}
	
\item Stateless
	\begin{itemize}
	\item Jede Anfrage vom Client enthält alle benötigten Informationen. Server speichert keine Client-Session-Daten.
	\end{itemize}

\item Cache
	\begin{itemize}
	\item Client darf Daten speichern und muss für dieselben Daten nicht immer wieder neu anfragen.
	\end{itemize}


\item Uniform Interface
	\begin{enumerate}
		\item Resource identification in requests
			\begin{itemize}
			\item Jede Ressource wird z.B. durch eindeutige URI identifiziert. URI ist Primärschlüssel der Ressource
			\item Jede Ressource kann unterschiedliche Reräsentationen haben (z.B. XML, JSON).
			\end{itemize}
		\item Resource manipulation through representations
			\begin{itemize}
			\item Client kann über die Repräsentation die Ressource verändern oder löschen.
			\end{itemize}
		\item Self-descriptive messages
			\begin{itemize}
			\item Jede Nachricht enthält Information, wie die Daten zu parsen sind (z.B. XML, JSON).
			\end{itemize}
		\item Hypermedia as the engine of application state (HATEOAS)
			\begin{itemize}
			\item Zustandsautomat: Repräsentationen sind Zustände, Hyperlinks sind Zustandsübergänge
			\end{itemize}
	\end{enumerate}
	
\item Layered System
	\begin{itemize}
	\item Client erkennt keinen Unterschied zwischen Endserver und Zwischenservern für Loadbalancing und Caching.
	\end{itemize}

\item Code-On-Demand (optional)
	\begin{itemize}
	\item Server können ausführbaren Code an Client übertragen, z.B. JavaScript.
	\end{itemize}
\end{enumerate}

\section*{CRUD-Umsetzung mit HTTP}
\begin{itemize}
\item GET: Daten lesen ohne Nebeneffekt (keine Zustandsänderung am Server).
\item POST: Neue Subressource in übergeordneter Ressource erstellen (keine ID übergeben)
\item PUT: Neue Ressource mit übergebener ID erstellen (bzw. ändern, falls sie schon existiert)
\item DELETE: Ressource löschen
\end{itemize}



\end{document}
