Ballerina,使用来自REST-API的Json响应



我的教授想让我写一篇关于如何部署芭蕾舞服务的小教程。所以我在努力学习。我使用的是版本1.2,我对污染检查和变量类型的概念有点不知所措……

我试图写一个最小的REST-Service与端点请求json数据从另一个api,然后使用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("");
}
}

使用从https://api.scryfall.com/cards/random

返回的JSON进行响应但是现在我们说,我想从JSON中访问一个值。例如"name"如果我尝试像这样访问它:payload["name"]

我得到:无效操作:类型'json'不支持索引

我刚刚发现,如果我先创建一个这样的映射,它就可以工作了:

map mp =payload;

如果我然后访问mp["name"]它工作。但是为什么呢?如果仍然需要创建映射然后强制转换负载,json类型有什么好处?如何在json中访问json呢?例如mp["data"][0]…无效操作:类型'json'不支持索引…

我还在努力理解污染检查的概念....难道我就把所有被污染的东西都转换为<@untainted>检查完内容?有时候我真的不明白文档想要告诉我什么....

我建议你使用芭蕾舞演员天鹅湖的版本。天鹅湖版本包含对各种语言特性的增强。下面是一个示例代码,涵盖了您的用例。您可以在https://ballerina.io/下载天鹅湖Alpha2

import ballerina/io;
import ballerina/http;
service tutorial on new http:Listener(9090) {
resource function get payload() returns json|error {
http:Client clientEP = check new ("https://api.scryfall.com/");
json payload = <json> check clientEP -> get("/cards/random", targetType = json);
// Processing the json payload 
// Here the type of the `payload.name` expression is json | error
// You can eliminate with check: it returns from this resource with this error
json nameField = check payload.name;
io:println(nameField);
// You can traverse the json tree as follows
json standardLegality = check payload.legalities.standard;
io:println(standardLegality);
// colors is an array 
// The cast is necessary because `check payload.colors` gives you a json
json colors = <json[]> check payload.colors;
io:println(colors);
// Responding with the complete payload recived from api.scryfall.com
return payload;
}
}

污点分析帮助您编写没有安全漏洞的代码。然而,我们在天鹅湖版本中禁用了污染分析。如果您想启用它,可以使用选项--taint-checkbal build

相关内容

  • 没有找到相关文章

最新更新