\documentclass[10pt,a4paper]{article} % Packages \usepackage{fancyhdr} % For header and footer \usepackage{multicol} % Allows multicols in tables \usepackage{tabularx} % Intelligent column widths \usepackage{tabulary} % Used in header and footer \usepackage{hhline} % Border under tables \usepackage{graphicx} % For images \usepackage{xcolor} % For hex colours %\usepackage[utf8x]{inputenc} % For unicode character support \usepackage[T1]{fontenc} % Without this we get weird character replacements \usepackage{colortbl} % For coloured tables \usepackage{setspace} % For line height \usepackage{lastpage} % Needed for total page number \usepackage{seqsplit} % Splits long words. %\usepackage{opensans} % Can't make this work so far. Shame. Would be lovely. \usepackage[normalem]{ulem} % For underlining links % Most of the following are not required for the majority % of cheat sheets but are needed for some symbol support. \usepackage{amsmath} % Symbols \usepackage{MnSymbol} % Symbols \usepackage{wasysym} % Symbols %\usepackage[english,german,french,spanish,italian]{babel} % Languages % Document Info \author{Huluvu424242 (FunThomas424242)} \pdfinfo{ /Title (http-rest-cheat-sheet.pdf) /Creator (Cheatography) /Author (Huluvu424242 (FunThomas424242)) /Subject (HTTP - REST Cheat Sheet) } % Lengths and widths \addtolength{\textwidth}{6cm} \addtolength{\textheight}{-1cm} \addtolength{\hoffset}{-3cm} \addtolength{\voffset}{-2cm} \setlength{\tabcolsep}{0.2cm} % Space between columns \setlength{\headsep}{-12pt} % Reduce space between header and content \setlength{\headheight}{85pt} % If less, LaTeX automatically increases it \renewcommand{\footrulewidth}{0pt} % Remove footer line \renewcommand{\headrulewidth}{0pt} % Remove header line \renewcommand{\seqinsert}{\ifmmode\allowbreak\else\-\fi} % Hyphens in seqsplit % This two commands together give roughly % the right line height in the tables \renewcommand{\arraystretch}{1.3} \onehalfspacing % Commands \newcommand{\SetRowColor}[1]{\noalign{\gdef\RowColorName{#1}}\rowcolor{\RowColorName}} % Shortcut for row colour \newcommand{\mymulticolumn}[3]{\multicolumn{#1}{>{\columncolor{\RowColorName}}#2}{#3}} % For coloured multi-cols \newcolumntype{x}[1]{>{\raggedright}p{#1}} % New column types for ragged-right paragraph columns \newcommand{\tn}{\tabularnewline} % Required as custom column type in use % Font and Colours \definecolor{HeadBackground}{HTML}{333333} \definecolor{FootBackground}{HTML}{666666} \definecolor{TextColor}{HTML}{333333} \definecolor{DarkBackground}{HTML}{A3A3A3} \definecolor{LightBackground}{HTML}{F3F3F3} \renewcommand{\familydefault}{\sfdefault} \color{TextColor} % Header and Footer \pagestyle{fancy} \fancyhead{} % Set header to blank \fancyfoot{} % Set footer to blank \fancyhead[L]{ \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{C} \SetRowColor{DarkBackground} \vspace{-7pt} {\parbox{\dimexpr\textwidth-2\fboxsep\relax}{\noindent \hspace*{-6pt}\includegraphics[width=5.8cm]{/web/www.cheatography.com/public/images/cheatography_logo.pdf}} } \end{tabulary} \columnbreak \begin{tabulary}{11cm}{L} \vspace{-2pt}\large{\bf{\textcolor{DarkBackground}{\textrm{HTTP - REST Cheat Sheet}}}} \\ \normalsize{by \textcolor{DarkBackground}{Huluvu424242 (FunThomas424242)} via \textcolor{DarkBackground}{\uline{cheatography.com/19991/cs/5953/}}} \end{tabulary} \end{multicols}} \fancyfoot[L]{ \footnotesize \noindent \begin{multicols}{3} \begin{tabulary}{5.8cm}{LL} \SetRowColor{FootBackground} \mymulticolumn{2}{p{5.377cm}}{\bf\textcolor{white}{Cheatographer}} \\ \vspace{-2pt}Huluvu424242 (FunThomas424242) \\ \uline{cheatography.com/funthomas424242} \\ \uline{\seqsplit{github}.com/Huluvu424242} \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Cheat Sheet}} \\ \vspace{-2pt}Not Yet Published.\\ Updated 12th May, 2016.\\ Page {\thepage} of \pageref{LastPage}. \end{tabulary} \vfill \columnbreak \begin{tabulary}{5.8cm}{L} \SetRowColor{FootBackground} \mymulticolumn{1}{p{5.377cm}}{\bf\textcolor{white}{Sponsor}} \\ \SetRowColor{white} \vspace{-5pt} %\includegraphics[width=48px,height=48px]{dave.jpeg} Measure your website readability!\\ www.readability-score.com \end{tabulary} \end{multicols}} \begin{document} \raggedright \raggedcolumns % Set font size to small. Switch to any value % from this page to resize cheat sheet text: % www.emerson.emory.edu/services/latex/latex_169.html \footnotesize % Small font. \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{HATEOAS Definition und Interpretation}} \tn \SetRowColor{white} \mymulticolumn{1}{x{17.67cm}}{==Zitat Beginn== \newline % Row Count 1 (+ 1) „REST APIs must be hypertext-driven" - Roy T. Fieldings \newline % Row Count 3 (+ 2) Hypermedia As The Engine Of Application State ist also eine essenzielle Bedingung für jede REST-Architektur. Dann sollte es von zentraler Bedeutung sein, diesen Satz genau zu verstehen: \newline % Row Count 7 (+ 4) 1. Hypermedia: Der Begriff Hypermedia setzt sich zusammen aus den Begriffen „Hypertext" und „Multimedia". Die griechische Pr{\"a}position „hyper" hat die Bedeutung „über … hinaus" – Hypertext ist also ein Text, der über sich selbst hinaus weist, und zwar durch Verlinkung auf einen anderen Text. Hypermedia erweitert dieses Konzept durch die Verallgemeinerung von Text durch Multimedia. \newline % Row Count 16 (+ 9) 2. Engine: Die deutsche Übersetzung von Engine ist (unter anderem) Maschine bzw. Automat – und genau das ist auch gemeint: ein Zustandsautomat. \newline % Row Count 19 (+ 3) 3. Application hei{\ss}t Anwendung – sowohl im Sinne eines Softwareprogramms als auch der Anwendung der Prinzipien einer (hier: REST-)Architektur. Im Kontext eines RESTful-API kann man Application gleichsetzen mit Ressource. \newline % Row Count 24 (+ 5) 4. State: State hei{\ss}t Zustand und verbindet Engine und Application: Ein Automat besteht aus Zust{\"a}nden und Überg{\"a}ngen und beschreibt damit das Verhalten der Anwendung. \newline % Row Count 28 (+ 4) == Zitat Ende == \newline % Row Count 29 (+ 1) {\bf{Interpretation}} \newline % Row Count 30 (+ 1) } \tn \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{X} \SetRowColor{DarkBackground} \mymulticolumn{1}{x{17.67cm}}{\bf\textcolor{white}{HATEOAS Definition und Interpretation (cont)}} \tn \SetRowColor{white} \mymulticolumn{1}{x{17.67cm}}{Der Browser sendet einen Request an eine Resource die er per URL identifiziert. Die Resource reagiert auf diesen Request jenachdem ob es sich um GET, PUT, POST, DELETE etc. handelt, evtl. verschieden. Letztlich wird die Resource ihre Repr{\"a}sentation zurücksenden - was auch immer die Resource dafür h{\"a}lt. Au{\ss}erdem wird die Resource diverse URLs mit Relationsattributen zurücksenden. Diesen URLs kann der Nutzer per Browser folgen. Dabei sollten ein URL auf die Resource selbst und ein URL der zur n{\"a}chsten Resource führt enthalten sein. Die Resourcen repr{\"a}sentieren in dem Fall Zust{\"a}nde eines Automaten und die URLs stellen die Zustandsüberg{\"a}nge dar. Daher ist es für den Server nie notwendig den Clientzustand zu halten, da er ja durch die gerade aufgerufene Resource repr{\"a}sentiert wird. \newline % Row Count 17 (+ 17) Gleiche Request an eine Resource müssen nicht notwendig zur gleichen Repr{\"a}sentation führen! Die Resource darf selbst entscheiden was sie als Repr{\"a}sentation für richtig h{\"a}lt und kann diese durchaus auch spontan wechseln. \newline % Row Count 22 (+ 5) {\bf{Anmerkung}} \newline % Row Count 23 (+ 1) Mir ist absolut nicht klar wie sich das Vorgehen für einen vorgeschalteten Login sicher realisieren l{\"a}sst aber ich gehe davon aus das es machbar ist. Vielleicht lassen sich dazu ja die spontanen Wechsel der Repr{\"a}sentation einer Resource nutzen.% Row Count 28 (+ 5) } \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \SetRowColor{LightBackground} \mymulticolumn{1}{x{17.67cm}}{Quelle der zitierten Stellen: \newline https://jaxenter.de/wer-rest-will-muss-mit-hateoas-ernst-machen-489} \tn \hhline{>{\arrayrulecolor{DarkBackground}}-} \end{tabularx} \par\addvspace{1.3em} \begin{tabularx}{17.67cm}{p{2.2451 cm} x{15.0249 cm} } \SetRowColor{DarkBackground} \mymulticolumn{2}{x{17.67cm}}{\bf\textcolor{white}{Request Arten}} \tn % Row 0 \SetRowColor{LightBackground} GET & Aktuelle Repr{\"a}sentation der Resource abfragen \tn % Row Count 2 (+ 2) % Row 1 \SetRowColor{white} PUT & Erzeugen und Aktualisieren. Zweimal PUT eines Objektes darf keine 2 Objekte erstellen sondern nur eins. 2x PUT beim Ändern darf verschiedene Teile vom Objekt {\"a}ndern.(http://stackoverflow.com/questions/630453/put-vs-post-in-rest) \tn % Row Count 9 (+ 7) % Row 2 \SetRowColor{LightBackground} POST & Erzeugen und Aktualisieren. Wenn der Server entscheidet ob ein Objekt angelegt oder ge{\"a}ndert wird dann POST. \seqsplit{(http://stackoverflow.com/questions/630453/put-vs-post-in-rest)} \tn % Row Count 15 (+ 6) % Row 3 \SetRowColor{white} \seqsplit{DELETE} & Loeschen oder Entfernen einer Resource \tn % Row Count 17 (+ 2) \hhline{>{\arrayrulecolor{DarkBackground}}--} \end{tabularx} \par\addvspace{1.3em} \end{document}