【问题标题】:How do you access get parameters in racket server application您如何访问球拍服务器应用程序中的获取参数
【发布时间】:2015-04-17 04:56:19
【问题描述】:

我在我的编程语言组织课程中有一个项目,我正在使用 Racket 构建一个 Web API。我已经成功启动并运行了一个具有多个登录页面的服务器,例如

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

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

比如……

localhost:8080/api/add/?num1=1&num2=3

num1 将由 PHP 访问

$_GET[ 'num1' ] ;

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

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

【问题讨论】:

标签: api web get scheme racket


【解决方案1】:

假设您使用的是Web Application in Racket

Servlet 过程接收请求对象并包含这些绑定。您可以通过返回绑定列表的request-bindings 过程来检索它。 4 HTTP: Hypertext Transfer Protocol 部分描述了如何访问请求对象。

【讨论】:

  • 如何应用您的方法的示例会很有帮助。
【解决方案2】:

好的,我在

中找到了解决方案

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/

会导致...

""

【讨论】:

    猜你喜欢
    • 2018-05-12
    • 2012-06-27
    • 1970-01-01
    • 1970-01-01
    • 2020-05-10
    • 1970-01-01
    • 2016-12-25
    • 2019-01-30
    • 1970-01-01
    相关资源
    最近更新 更多