Dette er den 4. post i en række af post's om Yaws. I denne post vil jeg prøve at lade et modul svare på et request.
Først skal der lige pilles lidt ved yaws.conf. ebin_dir sættes til at pege på en ny tom folder, f.eks.
ebin_dir = /Users/dalsgaard/lib/yaws/ebin
Dernæst skal der tilføjes følgende til server-direktivet
appmods = myapp
(linien placeres mellem <server localhost> og </server>)
I ebin_dir-folderen placeres nu en fil med navnet myapp.erl, og med følgende indhold
-module(myapp).
-export([out/1]).
out(A) ->
{html, "Hesten er et glubsk rovdyr!"}.
Filen skal nu compiles
$ erlc myapp.erl
Starter man Yaws, og peger en browser på URL'en http://localhost:8000/myapp/, så får man teksten Hesten er et glubsk rovdyr!
Det giver måske ikke så meget mening bare at bruge et module til at returnere almindelig html, men ønsker man f.eks at lave en service der returnere json giver det igen mening. Eksempelvis kan myapp.erl ændres til at returnere json på følgende vis
out(A) ->
Json = "{firstName: 'Kim', lastName: 'Dalsgaard'}",
{content, "application/json", Json}.
Denne nye service kan nu efterprøves ved hjælp af eksempelvis curl
$ curl http://localhost:8000/myapp/ -i
Da vi selvfølgelig gerne vil udstille en RESTful service, er det vigtigt at kende den del af url'en der skal bruges til at fremfinde resourcen. Denne er at finde i arg-recorden's pathinfo slot. For at vise dette kan myapp.erl ændres til følgende
-module(myapp).
-export([out/1]).
-include("/Users/dalsgaard/lib/yaws/include/yaws_api.hrl").
out(A) ->
Req = A#arg.req,
Method = Req#http_request.method,
Path = A#arg.pathinfo,
Json = io_lib:format("{method: '~s', path: '~s'}", [Method, Path]),
{content, "application/json", Json}.
Hvor /Users/dalsgaard/lib/yaws/include/yaws_api.hrl skiftes ud med den valgte sti.
URL'en http://localhost:8000/myapp/customers/1/orders/2 giver nu svaret {method: 'GET', path: '/customers/1/orders/2'}.
I den kommende post vil jeg kigge på hvorledes pathinfo kan bruges til at vælge den rigtige controller og den rigtige action for der igennem at fremfinde den ønskede resource (ala. Rails routes). På gensyn snarest :-)
0 kommentarer:
Send en kommentar