Posted to tcl by sebres at Thu May 28 12:14:27 GMT 2020view pretty

# uri's of rest-api:

namespace eval rest {proc uri2cmd {req} {
  set p [dict get $req uri]; set m [dict get $req method]
  # set p [::cgi::path validate $p]
  list [string map {/ ::} $p]::=$m {*}[dict get $req args]
}}

# uri's of simplest html-page's:

namespace eval page {proc uri2cmd {req} {
  set p [dict get $req uri]; set m [dict get $req method]
  # set p [::cgi::path validate $p];
  regsub {/([^/]*)$} $p {/=\1} p
  list ::page[string map {/ ::} $p] $m {*}[dict get $req args]
}}

# examples:

set req {api rest uri "/some/thing" method put args {name X surname Y}}
puts [namespace inscope [dict get $req api] uri2cmd $req]
# {*}[namespace inscope [dict get $req api] uri2cmd $req]

set req {api page uri "/some/page" method get args {id 123}}
puts [namespace inscope [dict get $req api] uri2cmd $req]
# {*}[namespace inscope [dict get $req api] uri2cmd $req]

set req {api page uri "/" method get args {}}
puts [namespace inscope [dict get $req api] uri2cmd $req]
# {*}[namespace inscope [dict get $req api] uri2cmd $req]