出自Yahoo_cn_wiki
您在这:首页 > NCP文档中心 > NCP接口文档 > 回调地址映射
回调地址映射
本章内容仅适用于代码嵌入方式,如果你采用的是框架嵌入方式,可以忽略本章的内容。
在代码嵌入方式下,用户访问NCP页面时,NCP调用对应的回调接口URL获取模块的内容。
完整视图回调接口的URL是根据NCP页面的URL和应用注册的信息计算出来的,这个计算的过程称为回调地址映射。
回调地址映射规则
回调地址映射的规则如下:
- 原始NCP页面URL:
http://{site_domain}/apps/{app_path}/{page_uri}?{page_args},其中:- {site_domain}:NCP站点域名
- {app_path}:应用路径
- {page_uri}:当前页面的相对URL
- {page_args}:回调参数
- 产生的回调接口URL:
{callback_root}/{callback_uri}?{callback_args},其中:- {callback_root}:回调接口URL的路径部分,即最后一个"/"之前的部分
- {callback_uri}:等于{page_uri}
- {callback_args}:等于{sys_args}&{page_args},其中{sys_args}是NCP系统参数。
由于用户直接访问的是NCP页面,开发者通常需要根据回调接口的URL反推出NCP页面的URL,以产生正确的应答。这个过程是上述映射的逆过程,称为回调地址逆映射。
在通过逆映射计算NCP页面URL的时候,建议使用相对路径,这样可以省略对站点域名的计算。
一个例子
例如前面的Hello World应用,其注册的信息如下:
- 应用路径:
helloworld - 回调地址:
http://example.com/myapp/fullview.html
则该应用的{callback_root}为:
http://example.com/myapp
如果在ncpdemo这个网站中加入Hello World的一个模块,其完整视图的入口页面将是:
http://ncpdemo.zhan.cn.yahoo.com/apps/helloworld/?module_id=xxx
假设模块的完整视图中有如下HTML片段:
<a href="/apps/helloworld/help/index.html">帮助</a> <form action="/helloworld/change_name.php" method="get"> <input type="hidden" name="module_id" value="xxx"/> 更改姓名:<input type="text" name="name"/> <input type="submit" value="提交"/> </form>
注:module_id这个参数是NCP传递给应用,然后由应用将该参数hidden到表单中。
当用户点击“帮助”链接的时候,会产生如下的回调请求:
http://example.com/myapp/help/index.html?{sys_args}
而当用户提交表单时,会产生如下的回调请求:
http://example.com/myapp/change_name.php?{sys_args}&name={name}
其中{name}为用户提交表单时所填写的姓名。
