请求Parser服务的最佳实践3.x -- services 领域 和 json 领域 drupal 相关 的问题

Request parser best practices for Services 3.x


4
vote

问题

中文

创建服务端点时,您可以启用各种请求解析器(应用程序/ JSON,Application / X-WWM-Form-Urlencoded,MultiPart / Form-Data ...)我应该如何决定是否使用JSON发送请求vs形式数据?

我看到的大多数"节点创建" 示例我看到这样做(我认为这使用了形式数据):

      //create a node     $node_data = array(                       "title"=>"DHC Tool 01",                       "type"=>"item",                        "status"=>false, //ensure unpublished                       "language" => "und", //lanugage neutral                       "field_webpage"=>array(                                               "und"=>array(                                                             0=>array("url"=>"http://berkeley.edu",)                                                            )                                              )                       );    // Use JSON   // $node_data = '{"title":"Tool Unpublished 10","type":"item","status":false,"language":"und","field_webpage":{"und":[{"url":"http://berkeley.edu"}]}}';     $options['data'] = http_build_query($node_data, '', '&');     $response = drupal_http_request($base_url . '/node', $options);   

使用JSON发送节点创建请求是否有任何优点?

如何修改上述代码以使用JSON?

谢谢!

英文原文

When you create a service endpoint you can enable various request parsers (application/json, application/x-www-form-urlencoded, multipart/form-data...) How should I decide whether to send the request using JSON vs form-data?

Most of the "node create" examples I've seen do something like this (I think this uses form-data):

    //create a node     $node_data = array(                       "title"=>"DHC Tool 01",                       "type"=>"item",                        "status"=>false, //ensure unpublished                       "language" => "und", //lanugage neutral                       "field_webpage"=>array(                                               "und"=>array(                                                             0=>array("url"=>"http://berkeley.edu",)                                                            )                                              )                       );    // Use JSON   // $node_data = '{"title":"Tool Unpublished 10","type":"item","status":false,"language":"und","field_webpage":{"und":[{"url":"http:\/\/berkeley.edu"}]}}';     $options['data'] = http_build_query($node_data, '', '&');     $response = drupal_http_request($base_url . '/node', $options); 

Is there any advantage to sending the node create request using JSON?

How would the above code be modified to use JSON?

Thanks!

     
 
 

回答列表

1
 
vote
vote
最佳答案
 

此代码将发送编码为JSON:

的请求
  function toolreq_test_create() {   $base_url = 'http://example.com/dirt';   $options = toolreq_service_login(); //this yields $options['headers']['Cookie'] = $data->session_name . '=' . $data->sessid;   if (!is_array($options)) {     print "error<p>";     return;    }         //create a node    $node_data = array(      'title' => 'DHC Tool 03',      'type' => 'item',      'status' => FALSE, //ensure unpublished      'language' => 'und', //lanugage neutral      'field_webpage' => array(        'und' => array(          0 => array('url' => 'http://berkeley.edu',)        )      )    );     //use json    $options['headers']['content-type'] = "application/json";    $options['method'] = 'POST';    $options['data'] = json_encode($node_data);     $request = drupal_http_request($base_url . '/node', $options);    if ($request->error) {      print ("Error doing http request");      print '<pre>' . var_dump($request) . '</pre>';    }    else {      print ("Success doing http request");      print '<pre>' . var_dump(json_decode($response->data)) . '</pre>';    }  }   

在考虑您的请求的最佳格式记住:

  • JSON是AJAX应用程序的有用格式,因为它允许您快速地在JavaScript对象和字符串值之间转换。参考: http://www.ibm.com/developerworks/ Web / Library / Wa-AjaxIntro11 / index.html
  • https://stackoverflow.com/questions/4007969 / application-x-www-form-ullencoded-or-multipart-form-data
 

This code will send a request encoded as JSON:

function toolreq_test_create() {   $base_url = 'http://example.com/dirt';   $options = toolreq_service_login(); //this yields $options['headers']['Cookie'] = $data->session_name . '=' . $data->sessid;   if (!is_array($options)) {     print "error<p>";     return;    }         //create a node    $node_data = array(      'title' => 'DHC Tool 03',      'type' => 'item',      'status' => FALSE, //ensure unpublished      'language' => 'und', //lanugage neutral      'field_webpage' => array(        'und' => array(          0 => array('url' => 'http://berkeley.edu',)        )      )    );     //use json    $options['headers']['content-type'] = "application/json";    $options['method'] = 'POST';    $options['data'] = json_encode($node_data);     $request = drupal_http_request($base_url . '/node', $options);    if ($request->error) {      print ("Error doing http request");      print '<pre>' . var_dump($request) . '</pre>';    }    else {      print ("Success doing http request");      print '<pre>' . var_dump(json_decode($response->data)) . '</pre>';    }  } 

When considering the best format for your request keep in mind:

  • JSON is a useful format for Ajax applications because it allows you to convert between JavaScript objects and string values quickly. ref: http://www.ibm.com/developerworks/web/library/wa-ajaxintro11/index.html
  • https://stackoverflow.com/questions/4007969/application-x-www-form-urlencoded-or-multipart-form-data
 
 
 
 

相关问题

1  使用Services-3.x节点资源创建新的*未发布*节点  ( Use the services 3 x node resource to create a new unpublished node ) 
有没有办法通过使用使用的节点来强制未发表的节点 节点资源? 要求:站点A定义了发布的内容类型'项目' 默认。网站B需要在A上创建"项目" 节点,而这些 自动创建的节点应该是未发布的。 function toolreq_test_create() { $toolreq_endpoint = variable_get...

2  通过服务3获取节点作为授权用户并休息  ( Getting node as authorized user via services 3 and rest ) 
我是德鲁佩尔的新手。我的目标是将它用于员工来管理自己的内容,然后通过休息到现有的公共网站从节点检索他们的内容。 使用drupal 7.10,服务3. Drupal驻留在子目录中,而不是在站点根目录中,如果这事项则。已为REST服务器创建名为"REST" 的端点。匿名访问是不可取的,因此已经为经过身份验证的访问请求创建...

3  服务模块返回的JSON格式  ( Format of the json returned by the services module ) 
我对JSON格式有很大的疑问,服务模块(对于Drupal 6)生成。 当我查看XML时,一切正常。 <result is_array="true"> <item> <nid>9</nid> <vid>9</vid> <type>producto</type> </item> </result> ...

0  在尝试与服务模块和http-post建立连接时,会话ID和Drupal Cookie的问题  ( Trouble with session id and drupal cookies when trying to establish a connection ) 
我正在尝试在我的常见LISP应用程序和我的Drupal网站运行服务和REST服务器之间完成一个HTTP-POST。目前我的休息服务器设置为接受用户登录,并使用海报(Firefox插件来创建HTTP请求)我能够连接到我的REST服务器。此外,如果我当前登录的时候,使用海报我得到了一个回复"406不可接受:已经登录了.....

10  使用服务3.x和JSON创建注释和节点  ( Creating comments and nodes with services 3 x and json ) 
我很难获得识别帖子的服务。 我也有一个类似的问题创建节点。 以下是我得到的错误: http / 1.1 406不可接受:缺少必需的参数评论 此消息来自文件:/services/server/rest_server/includes/restserver.inc 具体而言,线条: elseif (!isset...

4  通过来自Android的服务登录的正确方法是什么? [关闭]  ( What is the correct way of logging in through services from android ) 
关闭。这个问题需要更多聚焦。它目前不接受答案。 想要改进这个问题?更新问题,因此它仅拍摄了一个问题,只有编辑此帖。 关闭 7个月前。 ...

4  是否有一个例子OAUTH2客户端模块? [关闭]  ( Is there an example oauth2 client module anywhere ) 
此问题似乎在帮助中心中定义的范围内涉及Drupal。。 想要改进这个问题?更新问题,所以它是关于drupal答案的主题。 ...

2  是否有可能在Services-7.x-3.x中获取OAUTH?  ( Is it possible to get oauth working in services 7 x 3 x ) 
在Drupal 7中获取OAuth的任何快速指针? 我的需要是实现2条腿的OAuth,以便将消费者验证到具有(相当于)API键的服务端点。 在 http://drupal.org/node/13366974#comment-5305810 Marcingy说他犯下了#18的补丁。自那条评论以来,已经有7.x-3.x...

0  Drupal 7 Ubercart Rest Services模块(API)[已关闭]  ( Drupal 7 ubercart rest services module api ) 
关闭。这个问题是基于意见的。它目前不接受答案。 想要改进这个问题?更新问题,因此它可以通过编辑此帖的事实和引用来回答。 关闭 6年前。 ...

3  服务模块是否需要通过HTTP-POST(Drupal 7)对文件上传的Base64编码?  ( Does service module expect base64 encoding for file uploads through http post d ) 
我遇到了从我的LISP应用程序中上传的文件上传文件,我已经注意到我发现的所有卷曲PHP示例中有一个如此: $file = array( 'filesize' => filesize($filename), 'filename' => basename($filename), 'file' => bas...

0  通过服务模块启用SSL为REST服务器启用时返回的数据  ( No data returned when ssl enabled for rest server via services module ) 
我正在使用Drupal 6和最新的服务模块在CentOS上运行灯泡堆栈。在HTTP中,我运行的REST服务器正常工作,并按预期行为。 当我安装SSL证书时,我将所有端口80流量迫使到443(SSL)。这对Drupal工作很好,但已导致REST服务器返回任何数据。当然,我已经删除了力SSL并允许暂时的HTTP和HTTP...

1  如果在通过服务模块创建/更新节点后调用它,如何在hook_nodeapi()中决定?  ( How to decide in hook nodeapi if it was invoked after creating updating node v ) 
我正在开发一个自定义模块,只有在通过服务创建/编辑节点时,才能在hook_nodeapi()中执行操作。我找不到此点可用的任何数据,以便决定节点是否通过服务。 我知道一个可能的解决方案,使用 request_uri() 并基于该( https: //drupal.stackexchange.com//8568/193...

0  跟踪会话并调用Web服务  ( Tracking sessions and calling a web service ) 
我有一个模块,只需使用Web服务客户端来检索cookie信息,设置cookie信息并调用Web服务来帮助跟踪用户信息的耦合功能。但是,当我安装模块时,它无法识别执行从Web服务客户端加载服务的函数。它返回以下错误: Call to undefined function wsclient_service_load(...

0  如何在URL中提供参数,以获取两个分类术语和节点的JSON解析  ( How to give parameters in url for getting json parse for both taxonomy terms and ) 
我在CCK的CCK公司CCK中创建了2个节点,在CCK下的分类学B.现在我想为分类学A中的所有节点获得JSON解析。 我尝试过这个www.mywebsite / api / caxonomy_term?selectnodes&amp;参数[tid] = 1它给出了该分类项的值,但我不会在该类别下获取节点。以何种方式符...

2  如何自定义由REST呼叫检索的数据?  ( How to customize the data retrieved by a rest call ) 
我已启用 rest server (加上服务),可以在www中检索用户配置文件数据。 example.com/endpoint/user/123 如何自定义正在检索的数据?我想要不包括电子邮件地址并添加几个其他字段。 当我在www.example.com/endpoint/user/login中进行登录请求时,我想...

1  Drupal作为移动应用程序后端  ( Drupal as mobile application backend ) 
我尝试实现的是创建一种简单的形式,我将能够添加新内容(如"问题" 对象),并通过服务3.x访问信息。我的问题是我是德鲁佩尔的新手,一些指导将非常有用。我尝试创建一个新的自定义内容类型,但随着我需要分组字段,我使用了"现场收集" 模块。问题有时,使用节点服务时,我无法获取此字段集合的内容。所以我现在真的被困了。现在在我...

1  Drupal7的Web服务,用于用户配置文件  ( Web services in drupal7 for user profile ) 
我是drupal cms的新手。 我正在使用drupal7。我使用配置文件内容创建了用户注册页面。现在我想通过Web服务插入或更新或添加信息。我正在使用休息服务器。早些时候我曾经为节点,分类术语,文件的文件提供了这个/ localhost / drupal / endpoint / node或taxonomy_ter...

2  与自定义字段的Crud操作  ( Crud operations with custom fields ) 
我正在使用drupal 7使用services 3.x,并尝试通过服务公开为用户对象添加的自定义字段。为所有操作实现它的最简单方法(创建,检索,更新,删除)? ...

0  缓存REST服务器索引请求  ( Cache a rest server index request ) 
我为休息服务器创建了一个自定义模块,我创建了自己的资源,我希望能够缓存索引请求,以便使用HTTP请求IF - 标题返回304。 我找不到有关如何进行的信息。 ...

2  服务3.x JSON缓存匿名用户  ( Services 3 x json cache for anonymous user ) 
服务模块是否始终调用PHP以以JSON格式返回数据?无论如何都要缓存JSON输出以用于匿名用户(即,在不调用PHP的情况下检索JSON数据)?第一个请求将击中PHP,所有后续命中都应击中缓存。 我的端点看起来像这个 api/anon ,它没有任何会话认证。 我的请求看起来像这个 http://localhost/ap...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.