从Flutter(Dart)中的Rapid API获取JSON数据

时间:2019-10-15 17:03:27

标签: json flutter dart

我设法从Flutter项目上本地的Json文件加载数据。如果API网址类似于:

,我还能够从Internet上获取数据。

https://[API-Server][parameter1:xy][parameter2:abc][API-KEY:lasgoewrijeowfjsdfdfiia]

我用以下代码示例将其归档:

  Future<String> _loadStringFixtures() async {
    return await rootBundle.loadString('assets/fixtures.json');
  }

  Future loadFixtures() async {
    String jsonString = await _loadStringFixtures();
    final jsonResponse = json.decode(jsonString);
    FixturesAPI value = new FixturesAPI.fromJson(jsonResponse);
    return value;
  }

到目前为止一切都很好...

但是现在我正面临API提供程序RapidAPI的问题 您可以在这里找到文档等: https://rapidapi.com/api-sports/api/api-football/endpoints

如您所见,它们提供了一些代码段以连接到其API。 有一些C,C#,Java,Python等。您可以通过上面的链接查看所有这些内容。 可悲的是,没有Flutter的例子。 而且,我没有找到适应这些示例的方法。

通常,您可以将您的API密钥直接粘贴到URL中,但是这似乎不可能吗?也许是?

除了我做过的事情外,Flutter还可以从API接收数据吗?

非常感谢您的帮助!

2 个答案:

答案 0 :(得分:0)

是的,可能会出现抖动。在Flutter中使用Dio Package,这是一个功能强大的Http客户端。使用dio,您可以设置拦截器以将api键添加到url,因此您不必将其附加在每个请求中。 Setting interceptors将为您提供帮助。

答案 1 :(得分:0)

使用http package可能非常简单。您可以在下面的示例中看到...

import 'dart:convert';

import 'package:http/http.dart' as http;
import 'package:flutter/material.dart';

class APIService {
  // API key
  static const _api_key = <YOU-API-KEY-HERE>;
  // Base API url
  static const String _baseUrl = "api-football-beta.p.rapidapi.com";
  // Base headers for Response url
  static const Map<String, String> _headers = {
    "content-type": "application/json",
    "x-rapidapi-host": "api-football-beta.p.rapidapi.com",
    "x-rapidapi-key": _api_key,
  };

  // Base API request to get response
  Future<dynamic> get({
    @required String endpoint,
    @required Map<String, String> query,
  }) async {
    Uri uri = Uri.https(_baseUrl, endpoint, query);
    final response = await http.get(uri, headers: _headers);
    if (response.statusCode == 200) {
      // If server returns an OK response, parse the JSON.
      return json.decode(response.body);
    } else {
      // If that response was not OK, throw an error.
      throw Exception('Failed to load json data');
    }
  }
}

然后得到您的请求:

//....
APIService apiService = APIService();
// You future
Future future;
//in the initState() or use it how you want...
future = apiService.get(endpoint:'/fixtures', query:{"live": "all"});

//....