<commit_before>#### *Geosoftware 2* ####
#### *<NAME>, <NAME>* ####

# RESTful Web Services, JSON und OAuth #


## Gliederung: ##

1. RESTful Websevices
1. JSON
1. OAuth

## RESTful Webservices ##

### Was ist REST? ###
**REST** steht für: **RE**presentational **S**tate **T**ransfer <br>

Es handelt sich dabei um ein von Roy Fielding 1994 entworfenes Programmierparadigma für Webapplikationen, welches davon ausgeht, dass auf einen Aufruf einer **URI** (**U**niform **R**esource **I**dentifier) immer mit der gleichen Antwort geantwortet wird. <br>

Die Prinzipien nach dem REST funktioniert sind dabei:<br>

- Adressierbarkeit: Jede Ressource besitzt eine eindeutige Adresse (URI)
- Zustandslosigkeit: Jede REST-Nachricht enthält alle benötigten Informationen, somit muss keine offene Verbindung gehalten werden.
- Einheitliche Schnittstelle
- Entkopplung von Ressourcen und Repräsentation: Die gleiche Ressource kann in verschiedenen Repräsentationen dargestellt werden

### Was ist RESTful? ###
Unter RESTful versteht man die Umsetzung des REST-Paradigmas in einer Webanwendung. Dafür muss ein zustandsloses Client-/Server-Protokoll verwendet werden (meistens HTTP/HTTPS). Die wichtigsten (HTTP-)Operationen, die dabei verwendet werden sind dabei: <br>
    
- ```GET```
- ```POST```
- ```PUT```
- ```DELETE```

#### Beispiel: ####

In diesem Beispiel sehen wir uns eine Webanwendung an, die das Telefonbuch des IFGIs verwaltet und wir möchten mit einem Aufruf den Benutzer mit der UserID 0815 aufrufen. <br>

Als SOAP-Envelope sieht das ganze dann so aus: <br>

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
     <soap:body pb="http://ifgi.uni-muenster.de/phonebook">
      <pb:GetUserInfo>
       <pb:UserID>0815</pb:UserID>
      </pb:GetUserInfo>
     </soap:Body>
    </soap:Envelope>

Ist unsere Anwendung hingegen nun RESTful reicht uns diese kurze URL, die wir als HTTP-GET-Request senden, um die gleiche Ressource anzufragen: <br>

	http://ifgi.uni-muenster.de/phonebook/UserInfo/0815
    
### Warum REST? ###
Da das bis dato vorherschende SOAP (**S**imple **O**bject **A**ccess **P**rotocol) paradoxerweise sehr kompliziert war, herrschte ein großes Verlangen nach Vereinfachung. <br>

*Tabelle 1: Stärken und Schwächen von SOAP:*

|                    Stärken                    |            Schwächen         |
| --------------------------------------------- | --------------------------- :|
|     große Mächtigkeit der SOAP-Envelopes      | komplizierte XML-Nachrichten |
| Programmiersprachen- und Plattform-unabhängig |         großer Overhead      |
|                        -                      |         rechenintensiv       |

    


## JSON ##

### Was ist JSON? ###
**JSON** steht für: **J**ava**S**cript **O**bject **N**otation <br>

Es handelt sich um ein Datenaustauschformat, welches einen
Datenaustausch zwischen Anwendungen ermöglicht. <br>

**Ursprung:** Douglas Crockford (JavaScript); spezifizierte JSON-Standards <br>

- Unabhängig von der Programmiersprache

**Einsatzgebiete:**

- Datenübertragung zwischen Client und Server
- Ersatz für XML, um Ressourcen einzusparen<commit_msg>Tests with Tables<commit_after>#### *Geosoftware 2* ####
#### *<NAME>, <NAME>* ####

# RESTful Web Services, JSON und OAuth #


## Gliederung: ##

1. RESTful Websevices
1. JSON
1. OAuth

## RESTful Webservices ##

### Was ist REST? ###
**REST** steht für: **RE**presentational **S**tate **T**ransfer <br>

Es handelt sich dabei um ein von Roy Fielding 1994 entworfenes Programmierparadigma für Webapplikationen, welches davon ausgeht, dass auf einen Aufruf einer **URI** (**U**niform **R**esource **I**dentifier) immer mit der gleichen Antwort geantwortet wird. <br>

Die Prinzipien nach dem REST funktioniert sind dabei:<br>

- Adressierbarkeit: Jede Ressource besitzt eine eindeutige Adresse (URI)
- Zustandslosigkeit: Jede REST-Nachricht enthält alle benötigten Informationen, somit muss keine offene Verbindung gehalten werden.
- Einheitliche Schnittstelle
- Entkopplung von Ressourcen und Repräsentation: Die gleiche Ressource kann in verschiedenen Repräsentationen dargestellt werden

### Was ist RESTful? ###
Unter RESTful versteht man die Umsetzung des REST-Paradigmas in einer Webanwendung. Dafür muss ein zustandsloses Client-/Server-Protokoll verwendet werden (meistens HTTP/HTTPS). Die wichtigsten (HTTP-)Operationen, die dabei verwendet werden sind dabei: <br>
    
- ```GET```
- ```POST```
- ```PUT```
- ```DELETE```

#### Beispiel: ####

In diesem Beispiel sehen wir uns eine Webanwendung an, die das Telefonbuch des IFGIs verwaltet und wir möchten mit einem Aufruf den Benutzer mit der UserID 0815 aufrufen. <br>

Als SOAP-Envelope sieht das ganze dann so aus: <br>

    <?xml version="1.0"?>
    <soap:Envelope
    xmlns:soap="http://www.w3.org/2001/12/soap-envelope"
    soap:encodingStyle="http://www.w3.org/2001/12/soap-encoding">
     <soap:body pb="http://ifgi.uni-muenster.de/phonebook">
      <pb:GetUserInfo>
       <pb:UserID>0815</pb:UserID>
      </pb:GetUserInfo>
     </soap:Body>
    </soap:Envelope>

Ist unsere Anwendung hingegen nun RESTful reicht uns diese kurze URL, die wir als HTTP-GET-Request senden, um die gleiche Ressource anzufragen: <br>

	http://ifgi.uni-muenster.de/phonebook/UserInfo/0815
    
### Warum REST? ###
Da das bis dato vorherschende SOAP (**S**imple **O**bject **A**ccess **P**rotocol) paradoxerweise sehr kompliziert war, herrschte ein großes Verlangen nach Vereinfachung. <br>

*Tabelle 1: Stärken und Schwächen von SOAP:*

|                    Stärken                    |            Schwächen         |
| --------------------------------------------- | ---------------------------  |
|     große Mächtigkeit der SOAP-Envelopes      | komplizierte XML-Nachrichten |
| Programmiersprachen- und Plattform-unabhängig |         großer Overhead      |
|                        -                      |         rechenintensiv       |

    


## JSON ##

### Was ist JSON? ###
**JSON** steht für: **J**ava**S**cript **O**bject **N**otation <br>

Es handelt sich um ein Datenaustauschformat, welches einen
Datenaustausch zwischen Anwendungen ermöglicht. <br>

**Ursprung:** Douglas Crockford (JavaScript); spezifizierte JSON-Standards <br>

- Unabhängig von der Programmiersprache

**Einsatzgebiete:**

- Datenübertragung zwischen Client und Server
- Ersatz für XML, um Ressourcen einzusparen
{'fraction_non_alphanumeric': 0.13768115942028986, 'fraction_numerical': 0.011409189022510022, 'mean_word_length': 3.4009497964721844, 'pattern_counts': {'":': 0, '<': 47, '<?xml version=': 2, '>': 47, 'https://': 0, 'lorem ipsum': 0, 'www.': 4, 'xml': 4}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 4, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4124696', 'n_tokens_mistral': 2254, 'n_tokens_neox': 2220, 'n_words': 627}