(define-module (web gn-uri) #:use-module (ice-9 string-fun) #:use-module (ice-9 match) #:use-module (ice-9 regex) #:export ( get-version ; url-parse-id ; normalize-id ; strip-lang mk-meta mk-data mk-doc mk-html mk-url mk-id mk-gnid mk-predicate prefix url-parse-id normalize-id )) (define (normalize-id str) ;; (string-replace-substring (string-downcase str) " " "_") (match str (#f "unknown") (_ (string-replace-substring str " " "_")) )) (define (url-parse-id uri) (if uri (car (reverse (string-split uri #\057))) "unknown" )) (define get-version "4.0.0") ; (define base-url ; "https://luna.genenetwork.org") ;(define (prefix) ; "Build the API URL including version" ; (string-append base-url "/api/v" get-version)) (define base-url "http://localhost:8091") (define uri-base-url ; always points to genenetwork.org! "http://genenetwork.org") (define (prefix) "Build the API URL including version" base-url) (define* (mk-url postfix #:optional (ext "")) "Makes a fully qualified URL by adding the path (postfix+ext) to the API URL. If there is an existing http+hostname no prefix is added" (match (string-match "^http:" postfix) [ #f (string-append (prefix) "/" postfix ext)] [ _ (string-append postfix ext)] )) (define* (mk-uri postfix) "Add the path to the GN URI. A URI always points to http://genenetwork.org/" (string-append uri-base-url "/" postfix)) (define (mk-html path) "Create a pointer to API HTML documentation" (mk-url path ".html")) (define (mk-doc path) "Create a pointer to API HTML documentation (doc infix)" (mk-html (string-append "doc/" path))) (define (mk-meta path) "Create a meta URL for the API path" (mk-url path ".meta.json")) (define (mk-data path) "Append .json for the API path. If it is not a full URL it will prepend the host" (mk-url path ".json")) (define (mk-term postfix) (mk-html (string-append "term" "/" postfix))) (define (mk-predicate postfix) (mk-html (string-append "predicate" "/" postfix))) (define (mk-id postfix) "Expand URL to make $api/id/identifier. If postfix is a path it will only apply the last element" (mk-url (string-append "id" "/" (url-parse-id postfix)))) (define (mk-gnid postfix) "Expand URL to make http://genenetwork.org/id/identifier. If postfix is a path it will only apply the last element" (mk-uri (string-append "id" "/" (url-parse-id postfix))))