# RestServer und Service manuell implementieren



## lam_tr (27. Mai 2020)

Hallo zusammen,

hat jemand gute Tutorials oder Beispiele wie man ein Rest Server und dazu auch die Services erstellen kann.

Bisher habe ich immer per Spring Web das gemacht, ist super einfach, aber Lerneffekt ist kaum da. Um das Ganze ein bisschen per experimentieren zu können, möchte ich das selber implementieren.

Was wäre da zu beachten?

Wie kann ich einen Rest Service betreiben? 

Grüße
lam


----------



## httpdigest (27. Mai 2020)

Was genau möchtest du lernen? Was genau möchtest du selber implementieren? Einen HTTP Server?


----------



## lam_tr (27. Mai 2020)

Ich hatte vor ein paar Tage einen Mock Rest Server gebraucht, habe keine für mich ansprechenende Anwendung gefunden um meine Rest Request zu testen.

Deswegen möchte ich so eine Anwendung schreiben.

Dazu muss ich unter anderen auch wissen wie man
* Http Server aufsetzt
* Wie man ein Rest Service in den Server integriert

Nachtrag:
Okay der erste Punkt ist an sich nicht so schwer wie ich gedacht habe https://dzone.com/articles/simple-http-server-in-java


----------



## httpdigest (27. Mai 2020)

lam_tr hat gesagt.:


> Nachtrag:
> Okay der erste Punkt ist an sich nicht so schwer wie ich gedacht habe https://dzone.com/articles/simple-http-server-in-java


Naja, damit hast du ja noch keinen HTTP Server implementiert. Du hast einen HTTP Server benutzt.


----------



## sascha-sphw (27. Mai 2020)

Was ist mit Wiremock?





						WireMock - flexible, open source API mocking
					

WireMock is a tool for building mock APIs. API mocking enables you build stable, predictable development environments when the APIs you depend on are unreliable or don’t exist.




					wiremock.org


----------



## lam_tr (27. Mai 2020)

sascha-sphw hat gesagt.:


> Was ist mit Wiremock?
> 
> 
> 
> ...


Kennst du OpenSource oder kostenfreie Lösungen?


----------



## mrBrown (27. Mai 2020)

lam_tr hat gesagt.:


> Kennst du OpenSource oder kostenfreie Lösungen?


Steht doch unter Apache 2.0? 









						GitHub - wiremock/wiremock: A tool for mocking HTTP services
					

A tool for mocking HTTP services. Contribute to wiremock/wiremock development by creating an account on GitHub.




					github.com


----------



## lam_tr (27. Mai 2020)

absgesehen von em Wiremock. Wenn ich jetzt einen HTTP Server gestartet habe, kann ich auf dem laufenden Server einen Rest Service installieren?


----------



## thecain (27. Mai 2020)

Was verstehst du unter "einen Rest Service"? Und was möchtest du genau selber machen?


----------



## lam_tr (27. Mai 2020)

thecain hat gesagt.:


> Was verstehst du unter "einen Rest Service"? Und was möchtest du genau selber machen?



Ich will descriptive ein Rest Resource Path definieren und in dieser Konfiguration auch sagen was zurückgegeben werden soll, wenn es aufgerufen wird. Weiter will ich in der Konfiguration auch sagen wie der HTTP Server hochgefahren wird. An sich will ich das ein bisschen wie bei Spring Boot in der application.properties sagen welchen Host oder Port der Server anneehmen soll und der RestController werden dann von dem Server betrieben.

An folgende Beispiel sagt, wieviele Resource Pfade ich habe und wie ich darauf zugreifen kann per get, post, etc.

Beispiel einer Konfigurationsdatei:


```
Konfiguration{

  host: Wert;

  port: Wert;

  resources{

     get{

          path: "/data/contacts"

     }

     post{ }

     put{}

     ...

}
```

Meine Frage war, wenn ich zur Laufzeit mehrere get resourcen zu der Konfig hinzufüge, kann ich das dem Server sagen, er soll sofort annehmen, das wäre doch ein Hotdeploy oder?


----------



## sascha-sphw (27. Mai 2020)

Ich will Dir das jetzt nicht ausreden, ich finde "learning by doing" ist die beste Art sich etwas beizubringen. Ich würde Dir nur empfehlen Dich Schritt für Schritt von einfach zu komplex zu bewegen. Anhand Deiner Fragen, würde ich Dir aktuell empfehlen entweder das Framework zu verwenden (wenn es Dir nur ums Testen geht), oder mit einer leichteren Übung zu starten (wenn es Dir ums Lernen geht). Mocking Frameworks sind, wie ich finde, nicht unbedingt etwas mit dem man Starten sollte, die sind meistens extrem generisch und das ist für Anfänger meist nicht ganz trivial.

Hier ein Beispiel wie Du mit WireMock arbeiten würdest.

```
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.core/jersey-client -->
<dependency>
    <groupId>org.glassfish.jersey.core</groupId>
    <artifactId>jersey-client</artifactId>
    <version>2.31</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.glassfish.jersey.media/jersey-media-json-jackson -->
<dependency>
    <groupId>org.glassfish.jersey.media</groupId>
    <artifactId>jersey-media-json-jackson</artifactId>
    <version>2.31</version>
</dependency>
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine -->
<dependency>
    <groupId>org.junit.jupiter</groupId>
    <artifactId>junit-jupiter-engine</artifactId>
    <version>5.6.0</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-junit-jupiter -->
<dependency>
    <groupId>org.mockito</groupId>
    <artifactId>mockito-junit-jupiter</artifactId>
    <version>3.3.3</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/com.github.tomakehurst/wiremock-jre8 -->
<dependency>
    <groupId>com.github.tomakehurst</groupId>
    <artifactId>wiremock-jre8</artifactId>
    <version>2.26.3</version>
    <scope>test</scope>
</dependency>
<!-- https://mvnrepository.com/artifact/ru.lanwen.wiremock/wiremock-junit5 -->
<dependency>
    <groupId>ru.lanwen.wiremock</groupId>
    <artifactId>wiremock-junit5</artifactId>
    <version>1.3.1</version>
    <scope>test</scope>
</dependency>
```


```
package any.package.you.like;

import com.github.tomakehurst.wiremock.WireMockServer;
import com.github.tomakehurst.wiremock.client.WireMock;
import org.junit.jupiter.api.Assertions;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import ru.lanwen.wiremock.ext.WiremockResolver;
import ru.lanwen.wiremock.ext.WiremockUriResolver;

import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.MediaType;

@ExtendWith({
        WiremockResolver.class,
        WiremockUriResolver.class
})
public class SampleTest {

    @Test
    public void helloworldTest(@WiremockResolver.Wiremock WireMockServer server, @WiremockUriResolver.WiremockUri String uri) {

        server.stubFor(WireMock.get(WireMock.urlPathEqualTo("/hello"))
                .willReturn(WireMock.aResponse()
                        .withStatus(200)
                        .withHeader("Content-Type", MediaType.TEXT_PLAIN)
                        .withBody("world")));

        String response = ClientBuilder.newClient()
                .target(uri)
                .path("/hello")
                .request(MediaType.TEXT_PLAIN)
                .get(String.class);
        Assertions.assertEquals("world", response);
    }
}
```


----------



## lam_tr (28. Mai 2020)

A


sascha-sphw hat gesagt.:


> Ich will Dir das jetzt nicht ausreden, ich finde "learning by doing" ist die beste Art sich etwas beizubringen. Ich würde Dir nur empfehlen Dich Schritt für Schritt von einfach zu komplex zu bewegen. Anhand Deiner Fragen, würde ich Dir aktuell empfehlen entweder das Framework zu verwenden (wenn es Dir nur ums Testen geht), oder mit einer leichteren Übung zu starten (wenn es Dir ums Lernen geht). Mocking Frameworks sind, wie ich finde, nicht unbedingt etwas mit dem man Starten sollte, die sind meistens extrem generisch und das ist für Anfänger meist nicht ganz trivial.
> 
> Hier ein Beispiel wie Du mit WireMock arbeiten würdest.
> 
> ...


Alles klar, ich schau mal wie weit ich komme. Danke


----------

