我的教授希望我写一个有关如何部署Ballerina服务的小型教程,所以我正在学习它。我使用的是1.2版本,对于污点检查和变量类型的概念有些不知所措...
我正在尝试编写一个最小化的REST服务,其中一个端点从另一个API请求JSON数据,然后使用该JSON来执行操作。
到目前为止,以下功能已经可以正常工作:
service tutorial on new http:Listener(9090) {
// Resource functions are invoked with the HTTP caller and the incoming request as arguments.
resource function getName(http:Caller caller, http:Request req) {
http:Client clientEP = new("https://api.scryfall.com/");
var resp = clientEP->get("/cards/random");
if (resp is http:Response) {
var payload = resp.getJsonPayload();
if (payload is json) {
var result = caller->respond(<@untainted>(payload));
} else {
log:printError("");
}
} else {
log:printError("");
}
}
响应的JSON来自https://api.scryfall.com/cards/random
但是现在,假设我想从该JSON中访问单个值,例如“name”。 如果我尝试像这样访问它:payload ["name"]
我得到:无效操作:类型“json”不支持索引
我刚刚发现,如果先创建一个map,就可以正常访问,像这样:
map mp = <map> payload;
然后如果我访问mp ["name"],它就可以了。但为什么?如果您仍然必须创建一个map,然后转换负载,那么json类型有什么用处?如何访问json内部的json?例如mp ["data"] [0] ...再次出现无效操作:类型'json'不支持索引...
我仍然在努力理解污点检查的概念...... 在检查内容后,我是否只需将所有受污染的内容强制转换为<@untainted>? 有时我真的不明白文档试图告诉我的是什么....