Open6
Validate Address in Supabaseを作る
やりたいこと
Firebase ExtensionでValidate Address in Firestoreというエクステンションがあるらしく、Supabaseでも出来そうなので再現してみることにした。
Supabase Extensionなるものがいつか出来たらこういう事なんだろうと思いながら再現してみる。
構成は非常にシンプル。以下を準備する。
- Supabase Databaseに住所登録用のテーブル
- GCPにあるAddress Validation APIを叩くdart edge function
- テーブルへの書き込みで発火し、上記のedge functionを実行するPostgres Triggers
Address Validation API
リクエスト
"address": {
"regionCode": "US",
"locality": "Mountain View",
"addressLines": ["1600 Amphitheatre Pkwy"]
}
レスポンス
{
"result": {
// Validation verdict.
"verdict": {},
// Address details determined by the API.
"address": {},
// The geocode generated for the input address.
"geocode": {},
// Information indicating if the address is a business, residence, etc.
"metadata": {},
// Information about the address from the US Postal Service
// ("US" and "PR" addresses only).
"uspsData": {},
},
// A unique identifier generated for every request to the API.
"responseId": "ID"
}
Dart Edge
まずSupabase cliを入れないといけない
brew install supabase/tap/supabase
その後、dart製のedge cliも入れる
# install the edge CLI
dart pub global activate edge
以下のコマンドでdart edge用のプロジェクトを作成
edge new supabase_functions [任意のプロジェクト名]
作成されたプロジェクト内に移ってsupabase init
を実行
cd [任意のプロジェクト名]
supabase init
edge functionで使う(であろう)以下のパッケージをインストール
dart pub add supabase
dart pub add edge_http_client
main.dart
内でSupabaseClient
をインスタンス化して使う
main.dart
import 'dart:convert';
import 'package:supabase_functions/supabase_functions.dart';
import 'package:edge_http_client/edge_http_client.dart';
import 'package:supabase/supabase.dart';
void main() {
final supabase = SupabaseClient(
Deno.env.get('SUPABASE_URL')!,
Deno.env.get('SUPABASE_SERVICE_ROLE_KEY')!, // Use service role key to bypass RLS
httpClient: EdgeHttpClient(),
);
SupabaseFunctions(fetch: (request) async {
// You can query `public.users` table for example.
final List users = await supabase.from('users').select().limit(10);
return Response.json(users);
});
}
Reuestからパラメータを取り出す
json()
メソッドでjsonを取得可能
final req = (await request.json()) as Map<String, dynamic>?;
参考
なんてこった...dart edgeビルド出来ない不具合継続中...
依存してるjs_bindingsがディスコンとの事...
Postgres SQL
Postgres SQLからAPIを呼び出す
Edge functions
急遽tsでedge functionsを開発する事に😭