zio-restful-webservice
zio-restful-webservice copied to clipboard
ZIO 2.0 Restful webservice example using zio, zio-http, zio-json, quill, H2, twirl, zio-streams, zio-cache, zio-logging, zio-actors, zio-spark, openai, DallE
ZIO Restful webservice example
Using zio 2.0, zio-http, zio-json, quill, H2, twirl, zio-logging, zio-cache, zio-actors, zio-spark, openai
Now targeting zio-http 0.0.3
Apps
NoEnvApp
(no use of Environment)
- http://localhost:8080/noenv
- http://localhost:8080/headers (shows headers and use of request altering middleware, note "Seen" header)
- http://localhost:8080/simplepost (POST some json, e.g.
{"string": "hello"}) - http://localhost:8080/simplepost2 (The same but using an implicit class to clean up parsing a bit)
- http://localhost:8080/simplepostcodec (The same but using MiddlewareCodec magic)
HelloWorldApp
(Takes a String param via serviceAt Map as app root name)
- http://localhost:8080/hello
- http://localhost:8080/hello/Dino
- http://localhost:8080/hello?name=Dino&name=Milo
HelloWorldTwirlApp
(Takes a String param and uses Twirl for HTML rendering)
- http://localhost:8080/hellotwirl
- http://localhost:8080/hellotwirl/Dino
DownloadApp
(Downloads a file in one go, and streaming, slowly)
- http://localhost:8080/download
- http://localhost:8080/download/stream
CounterApp
(Stateful use of Ref)
- http://localhost:8080/up
- http://localhost:8080/up/ (You can put slashes at the end of each endpoint here)
- http://localhost:8080/down
- http://localhost:8080/get
- http://localhost:8080/reset
VideoApp
(In memory and H2+Quill)
- POST http://localhost:8080/videos/:name
- http://localhost:8080/videos
- http://localhost:8080/videos/loadup
- http://localhost:8080/videos/:uuid
DelayApp
(Semantically sleeps for a while, no thread blocking, useful for emulating slow queries)
- http://localhost:8080/delay
- http://localhost:8080/delay/2
- http://localhost:8080/bang
- http://localhost:8080/bangrandomly
StreamApp
(Some streaming examples)
- http://localhost:8080/stream/incrementing
- http://localhost:8080/stream/randomInt
- http://localhost:8080/stream/videos
- (Make sure you have some videos in DB, perhaps call http://localhost:8080/videos/loadup)
ClientApp
(Client examples talking to external web service https://jsonplaceholder.typicode.com/)
- http://localhost:8080/client/users
- http://localhost:8080/client/users/1 (Is Cached, TTL 15 seconds)
- http://localhost:8080/client/posts
- http://localhost:8080/client/posts/1
- http://localhost:8080/client/posts/userId/1
- http://localhost:8080/client/dopost
Downloads anime from https://api.waifu.pics/many/sfw/waifu into resources/waifu dir
- http://localhost:8080/client/girls
StaticApp
(Static file server from static dir)
- http://localhost:8080
- http://localhost:8080/subdir
- http://localhost:8080/subdir/test3.txt
- http://localhost:8080/test.txt
- http://localhost:8080/test2.txt
ActorsApp
- http://localhost:8080/actors
- http://localhost:8080/actors/[int]
- http://localhost:8080/nodie
- http://localhost:8080/catchAll
- http://localhost:8080/randomString
OpenAICompletionApp
(Modelled after https://github.com/openai/openai-quickstart-python.git)
To use it you'll have to fill in your OpenAI OPENAI_API_KEY
- http://localhost:8080/openai/superhero/Dog
- http://localhost:8080/openai/prompt/translate+I+like+kittens+to+French
OpenAIDallEApp
- http://localhost:8080/openai/dalle/a+ginger+cat,+wearing+round+black+glasses,+riding+a+bike+and+smoking+a+pipe,+photorealistic
OpenAIModerationApp
- http://localhost:8080/openai/moderation/we+must+kill+all+the+elves
- http://localhost:8080/openai/moderation/we+must+kiss+all+the+elves
CookieAuthApp
- http://localhost:8080/login/dino/onid
- http://localhost:8080/login/dino/badpassword
- http://localhost:8080/auth/dino/greet
- http://localhost:8080/auth/wrongname/greet
FormApp
- http://localhost:8080/form.html
Parallel server on port 8082
- http://localhost:8082/hello => world
- http://localhost:8082/world => hello
To run
sbt run
You should find it running on http://localhost:8080/