如何在球拍服务器应用程序中访问get参数

时间:2015-04-17 04:56:20

标签: api web get scheme racket

我在我的编程语言组织课程中有一个项目,我正在使用Racket构建一个Web API。我已设法启动并运行具有多个目标网页的服务器,例如

localhost:8080/api/add 
localhost:8080/api/subtract

我是Racket的新手,过去刚刚使用PHP处理通过URL传递的GET参数。

如......

localhost:8080/api/add/?num1=1&num2=3
PHP将使用

加入

num1

$_GET[ 'num1' ] ;

如何在Racket中完成?我没有在Racket文档中找到任何显示等效方法的内容。我的最终目的是将JSON字符串作为GET参数传递给json

localhost:8080/api/add/?json={ some json }

2 个答案:

答案 0 :(得分:0)

假设您使用的是Web Application in Racket

Servlet过程接收请求对象,它包含那些绑定。您可以通过request-bindings过程检索它,该过程返回绑定的alist。 4 HTTP: Hypertext Transfer Protocol部分介绍了如何访问请求对象。

答案 1 :(得分:0)

好的,我在

中找到了解决方案

POST/GET bindings in Racket

基本上得到

localhost:8080/api/add/?json={ some json }

你会用

(bytes->string/utf-8 
    (binding:form-value 
        (bindings-assq (string->bytes/utf-8 "[field_name_here]") 
                       (request-bindings/raw req))))

现在这回答了我的问题但是当我搜索的绑定不存在时让我遇到异常,所以我决定采取额外的步骤并执行存在检查。在PHP中,我想执行类似......

的操作
<?php 

    function get_param_as_string( $param ) {
        if ( isset( $_GET[ $param ] ) )
            return $_GET[ $param ] ;
        return "" ;
    }

?>

所以我创建了球拍程序​​

(define (get-param->string req param)
    (if (eq? #f (bindings-assq (string->bytes/utf-8 param)
                               (request-bindings/raw req)))
        ""
        (bytes->string/utf-8 
           (binding:form-value 
               (bindings-assq (string->bytes/utf-8 param)
                              (request-bindings/raw req))))))

现在与url问题所指定的情况一样

localhost:8080/api/add/?json={ some json }

以下将检索json GET变量(如果存在)或者如果缺少则返回“”。所以...

(get-param->string req "json")

会导致......

{ some json }

localhost:8080/api/add/?tmp={ some json }

localhost:8080/api/add/

会导致......

""