Flutter 개발 일지

KaKao Map Rest API + Flutter 사용해보기 ( http 통신 ) - 3 ( API GateWay)

anycoding 2024. 6. 4. 00:47
반응형
해당 게시글에서는 지도 화면이 아닌 JSON 데이터를 받는 방법입니다!
이번에는 API GateWay를 생성하고 lambda와 연결, flutter에서 호출할 차례이다.

이전 글
 

KaKao Map Rest API + Flutter 사용해보기 ( http 통신 ) - 2 ( AWS lambda)

해당 게시글에서는 지도 화면이 아닌 JSON 데이터를 받는 방법입니다!이번에는 lambda 함수를 먼저 작성하고 테스트 해보자 이전에는 Flutter + rest api 통신 문제로 인해 통신하지 못했지만, javascript

p-coding.tistory.com

 

이전에는 lambda 함수를 생성하고 테스트하여 Kakao Rest Api가 정상적으로 작동하는지 시도해 보았다. 이번에는 그 함수의 반환 값을 받기 위해서 API GateWay를 사용하여 Flutter에서 접근할 수 있도록 만들어 보자.

 

1. 저번과 같이 콘솔 상단에 API GateWay 검색 후 이동해주자

 

2. API 생성 해주자

 

3. REST API 구축해주자

 

4. 식별가능한 이름과 설명을 작성한 뒤 생성해주자

 

5. 리소스를 생성해주자

API_GATEWAY_Path/locations 를 가지는 리소스를 만들 수 있다.

 

6. 이제 요청할 메서드를 생성하자

( 여기서 GET과 POST를 선택할 수 있는데 GET은 Param에 포함하여 요청하고 POST는 Body로 요청한다. 
나는 POST로 진행하였다. )

이전에 설정했던 lambda함수를 선택해주자!

 

7. 다음은 스테이지를 정의해야 한다.

원하는 스테이지를 정의하고 우리는 테스트로 dev로 설정해주자

 

그러면 다음과 같이 URL 호출이 생성되며 URL/locations 를 사용하여 우리가 설정한 API 호출할 수 있다.

 

이제 GateWay 설정도 완료되었으니 Flutter에서 호출해보자

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

class TestPage extends StatefulWidget {
  const TestPage({super.key});

  @override
  State<TestPage> createState() => _TestPageState();
}

class _TestPageState extends State<TestPage> {
  Future<void> fetch() async {
    // 현재의 위도 경도 위치를 가져옴
    Position position = await Geolocator.getCurrentPosition(
        desiredAccuracy: LocationAccuracy.high);

    const String url =
        'URL/locations';

    Map<String, String> headers = {
      'Content-Type': 'application/json',
    };

    final Map<String, dynamic> body = {
      'y': '${position.latitude}',
      'x': '${position.longitude}',
    };

    http.Response response = await http.post(
      Uri.parse(url),
      headers: headers,
      body: json.encode(body),
    );

    if (response.statusCode == 200) {
      log(response.body);
    } else {
      log('Failed to send data: ${response.statusCode}');
    }
  }

  @override
  void initState() {
    super.initState();
    fetch();
  }

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: const Text("테스트 페이지"),
      ),
      body: const Center(
        child: Text("지도 api 테스트중 입니다."),
      ),
    );
  }
}

 

URL에 설정한 URL 값을 넣어주고 실행하자 log를 통해 우리가 설정했던 body가 들어온 것을 알 수 있다.

 

 

마치며...
이제 이 값들을 변환시켜 좌표값을 가져오고 좌표값을 통해 네이버 지도를 띄울 수 있다.
다음 글은 네이버 지도 RestAPI를 통해 Static Map을 띄우도록 하겠다
좌표값을 알고 있기 때문에 dynamic, Static 자유롭게 사용해도 된다.
반응형