gpt4 book ai didi

api - 如何使用Dart从GraphQL API获取和使用所需的属性?

转载 作者:行者123 更新时间:2023-12-03 05:00:06 25 4
gpt4 key购买 nike

在开始阅读之前:我已经看过GraphQL文档,但是我的用例是如此具体,我只需要一次数据,因此我允许自己向社区寻求帮助,以节省时间和沮丧(不打算将来再学习GraphQL)

简介

我是一名CS学生,在侧面为Flutter开发应用程序,在那里我需要有关挪威特定县中每个公交车站的名称和位置的信息。幸运的是,此(API URL:https://api.entur.io/stop-places/v1/graphql)有一个开放的GraphQL API。问题是,我不知道如何查询GraphQL API,并且我不想花时间学习它,因为我只会获取一次数据并完成处理。

这是API的IDE:https://api.entur.io/stop-places/v1/ide

这个是我想要执行的确切查询,因为我想获取位于特隆赫姆县的公交车站:

{
stopPlace(stopPlaceType: onstreetBus, countyReference: "Trondheim") {
name {
value
}
... on StopPlace {
quays {
geometry {
coordinates
}
}
}
}
}

但是,此查询的问题在于,将“特隆赫姆”传递给CountyReference时,我没有任何数据(没有CountryReference时,我得到了数据,但对于特隆赫姆却没有)。我也尝试过使用该县的官方市政编号,但运气不佳,而且API的文档还很贫乏……也许这是我必须联系负责API的人员找出的原因,这不应该是一个问题。

但是现在回到真正的问题-如何使用GraphQL程序包对Dart进行此查询? 这是我打算使用的软件包:( https://pub.dev/packages/graphql)

我想为每个公交车站创建一个公交车站对象,并将它们全部放入列表中。这是我的公交车站模型:
class BusStop with ChangeNotifier {
final String id;
final String name;
final LatLng location;

BusStop({
this.id,
this.name,
this.location
});
}

关于身份验证,文档说明如下:

This API is open under NLOD licence, however, it is required that all consumers identify themselves by using the header ET-Client-Name. Entur will deploy strict rate-limiting policies on API-consumers who do not identify with a header and reserves the right to block unidentified consumers. The structure of ET-Client-Name should be: "company - application" Header examples: "brakar - journeyplanner" "fosen_utvikling - departureboard" "norway_bussekspress - nwy-app"



链接到API文档:https://developer.entur.org/pages-nsr-nsr

很高兴知道我也应该如何做!对于这个问题的每一个回答,我都很感激,我知道我在这里学习GraphQL时很懒惰,但是对于我的用例,我认为通过在这里询问会花费更少的时间和沮丧!

最佳答案

正确查询

首先,您似乎已经了解了GraphQL。除了您正在做的事情外,没有什么比这更多的了。 API支持的查询取决于API。您似乎遇到的问题与您使用的特定API有关。我可能已经为您找到了正确的查询,如果没有,我会快速解释我做了什么,也许您可​​以自己改善查询:

{
stopPlace(stopPlaceType: onstreetBus, municipalityReference: "KVE:TopographicPlace:5001") {
name {
value
}
... on StopPlace {
quays {
geometry {
coordinates
}
}
}
}
}

因此,为此,我开始使用 topographicPlace查询来查找有关“特隆赫姆”贝的更多信息。
{
topographicPlace(query: "Trondheim") {
id
name {
value
}
topographicPlaceType
parentTopographicPlace {
id
name {
value
}
}
}
}

如果这样做,根据API: "topographicPlaceType": "municipality",您将看到“特隆赫姆”不是一个县。我不知道什么是市政当局,但是对于您提供的查询,此类型的过滤器是不同的。然后将“Trondheim”放进去没有产生任何结果,所以我尝试了Trondheim的ID。现在,这给了我很多结果。

关于您使用的GraphQL客户端:

这似乎是Dart中的“Apollo Client”克隆。 Apollo Client是一款繁重的软件,在前端应用程序中使用时具有许多很棒的功能。您可能只想从后端发出单个GraphQL请求。我建议使用一个简单的HTTP客户端将POST请求发送到GraphQL API和具有以下属性的JSON主体(不要忘记内容类型 header ): query包含上面的查询字符串, variables包含JSON对象映射变量名称值(仅当您决定向查询中添加变量时才需要。

关于api - 如何使用Dart从GraphQL API获取和使用所需的属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59665453/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com