NetSuite SuiteScript RESTlet如何获取HTTP请求的调用URL信息
解答
NetSuite SuiteScript 2.x 版本的RESTlet脚本没有原生API可以直接获取完整的原始请求URL,你可以根据实际需求选择以下方案实现:
- 方案1:拼接获取请求URL(适用于只需要拿到访问地址、自定义查询参数的场景)
引入N/url模块可以直接获取当前RESTlet的外部部署URL,再结合context中自动解析的URL参数即可拼接出完整请求地址,示例代码如下:
/** *@NApiVersion 2.x *@NScriptType Restlet */ define(['N/record', 'N/error', 'N/url'], function(record, error, url) { // Get a standard NetSuite record function _get(context) { // 获取当前RESTlet的外部访问基础URL const baseUrl = url.resolveScript({ scriptId: '替换为你的RESTlet脚本ID', deploymentId: '替换为你的RESTlet部署ID', returnExternalUrl: true }); // 拼接URL上的自定义查询参数(GET/DELETE请求下,除script、deploy外的查询参数会自动解析到context中) const queryParams = Object.entries(context) .map(([key, value]) => `${encodeURIComponent(key)}=${encodeURIComponent(value)}`) .join('&'); const fullRequestUrl = queryParams ? `${baseUrl}&${queryParams}` : baseUrl; return JSON.stringify(record.load({ type: context.recordtype, id: context.id })); } return { get: _get, delete: _delete, post: post, put: put, }; });
注意:
url.resolveScript返回的基础URL已经自带script=xxx&deploy=xxx参数,所以拼接自定义参数的时候用&连接即可。如果是POST/PUT类型请求,自定义URL参数不会自动解析到context中,建议把需要的标识信息放到请求体或者自定义请求头中传递。
- 方案2:改用Suitelet脚本(适用于必须获取完整原始请求URL、全量请求头的场景)
RESTlet是NetSuite封装的轻量接口类型,设计上就隐藏了底层请求/响应对象的全量属性。如果你必须拿到原始请求的完整URL、未经过解析的原始请求头,建议换用Suitelet类型开发接口,Suitelet的入口函数可以直接访问request对象,通过request.url就能直接拿到完整请求URL,通过request.headers可以获取所有请求头信息。
内容的提问来源于stack exchange,提问作者Mule
相关产品推荐
相关产品推荐

