It's a grading season in our COVID-19 home-schooling experiment. I will help my kids learn so I reopened some javascript tool I jotted together a year or two ago to quickly write down notes, trees and graphs when we learned history. It's just a bunch of JavaScript and I decided that I should add a simple backend to it, so I can save notes like a normal person. Then I might have motivation to improve on it and make it more generally usefull.
This was an excuse to start writing a very minimal web-application server in Rye. It will follow the similar system that my Rebol apps use since pre-2009. The backend is a STRPC API. It stands for SoTinyRPC and is a really simple HTTP-based way of calling functions on the server. It's very easy to implement a client in any language, curl, or just a html form. It's very easy to serve on a server. My production implementation features multiple return formats, clear validation errors, multiple method calls in one http call and also offers self documenting explore mode.
I added a lot of new basic and http related functions to Rye today. Like any, all, to-word, probe, mold (which are straight from Rebol), code?, check, to-json . I added an interesting function require which sort of un-nests the if-s. It's a go-ism, where flatter happy paths are desirable.
To the http module I added query?, form?, full-form?, set-content-type and write-header. All of these are generic methods and dispatch on server-response-writer or server-request.
There is still much to do, but many mechanisms are in place now. The requests are passed to the right resource (_r) and method (_m). Data is validated with the validation dialect, results of a webfn are converted to JSON and returned. Errors set the right http status and are returned as JSON also.
This example creates two resources, each with one demo method. Next I should add a session support and postgresql, so it will look more realistic. SQL dialect in conjunction with webfn should be nice too.
The "web framework" for this are just 5 functions below. Nothing special, except webfn which is a "function creating function". Something you probably can't see in most programming languages. It's like defining a your own def in Python. Rye is homoiconic but there is no code generation or macros needed for this.
This is the behavior we get. With correct id of 77 ...
... and an error with any other id. Notice the nested errors.
That's it for now. As I said, session management and posgresql functions are next.
Komentarji
Objavite komentar