- はじめに
- 利用する技術
- Visual Studio 2022のDev Tunnelsを利用する
- 関連記事
- おわりに
はじめに
Power Platformでは、1,000以上のコネクタが用意されています。
Power Platformではこれらのコネクタを利用することで外部サービスとの連携がノーコード/ローコードで行えるようになっているわけですね。
しかし自身が利用したいサービスのAPIが公開されているにも関わらず、予めコネクタが提供されていないようなサービスもあります。
これは自社サービスなどの独自に作成したAPIサービスなども含まれますね。
そのような場合Power AutomateのHTTP要求で接続する方法もありますが、カスタム コネクタという独自のコネクタを作成して利用、共有を行う方法があります。
今回はこのカスタム コネクタという機能を勉強するにあたり、利用できる技術を紹介します。
対象者は開発がちょっとわかる方(ネットスラングではなく、文字通りの意味)を対象にしています。
利用する技術
カスタム コネクタを利用するにはAPIが必要です。
APIの利用には一般に公開されているAPIを利用する方法や、自身で開発したAPIをAzure FunctionsなどのAPIサーバーを用意する方法があります。
前者ですと公開されているAPIのAPI仕様ベースでしかカスタム コネクタの検証は行えません。
また、対象のサービス利用制限を考慮する必要もあります。
後者ですと、APIを利用するための料金が掛かります。
そこで今回はVisual StudioのDev tunnelsを利用してテスト用のAPIを用意したいと思います。
Visual Studio 2022のDev Tunnelsを利用する
前提条件
以下が必要です。
- ASP.NET と Web 開発ワークロードがインストールされたVisual Studio 2022 バージョン17.6以降
Web APIを作成する
Webプロジェクトを作成する
こちらのチュートリアルベースで紹介します。
「新しいプロジェクトの作成」より「ASP.NET Core Web API」を選択して「次へ」を選択します。
任意のプロジェクト名とプロジェクトを作成するフォルダの場所を選択して「次へ」を選択します。
以下となっていることを確認して「作成」を選択します。
「ツール」 > 「NuGet パッケージ マネージャー」 > 「ソリューションの NuGet パッケージの管理」を選択します。
「参照」タブを選択して、「Microsoft.EntityFrameworkCore.InMemory」を選択します。
その後、右側のウィンドウが表示されるので、「プロジェクト」にチェックをして「インストール」を選択してインストールを行います。
プロジェクトをテストする
Ctrl + F5 もしくは、「デバッグ」 > 「デバッグなしで開始」を選択します。
SSL を使用するようにプロジェクトが構成されていないので以下ダイアログが表示されますが、「はい」を選択します。
こちらも「はい」を選択して証明書のインストールを行います。
既定のブラウザーが起動し、以下のような画面が表示されます。
APIのテストをしてみましょう。
「GET」を選択します。
「Try it out」を選択します。
「Execute」を選択します。
その結果以下のような応答が得られるはずです。
Dev Tunnelsを作成する
トンネルを作成する
APIの用意が完了したので、Dev Tunnelsを試してみます。
「https」 > 「Dev Tunnels」 > 「トンネルを作成」を選択します。
トンネル作成のダイアログが表示されますので、それぞれ入力を行います。
- アカウント: トンネル作成に使用するアカウントを選択します。
- 名前: トンネルの名前を入力します。
- トンネルの種類: 「一時的」または「永続的」を選択します。
- 一時的: Visual Studioが起動されるたびに新しいURLが取得されます。
- 永続的: Visual Studioを再起動しても同じURLが取得されます。(詳細は 永続的なトンネルと一時的なトンネル を参照)
- アクセス: トンネルのアクセスに必要な認証情報を選択します。カスタム コネクタで利用する場合は公開用を選択します。
「OK」を選択すると以下のようなダイアログが表示され、「開発トンネル」で先ほど作成したトンネルが表示されます。
トンネルを使用する
「開発トンネル」にて、先ほど作成したトンネルが選択されていることを確認します。
先ほど作成したトンネルが選択されていることを確認した後、Ctrl + F5 もしくは、「デバッグ」 > 「デバッグなしで開始」を選択します。
既定のブラウザーが起動し、以下のような画面が表示されますので「続行」を選択します。
その結果、先ほどと同じWebアプリが起動するかと思いますが、URLがlocalhostではなくなっているかと思います。
例
- デバッグ前:
https://localhost:7223/swagger/index.html
- デバッグ後:
https://50tt58xr-7223.usw2.devtunnels.ms/swagger/indexf.html
Dev Tunnelsで作成されたAPIを利用してカスタムコネクタを作成する
あとはカスタム コネクタの作成方法と同じです。
Power Appsにアクセスして、「カスタム コネクタ」の新規作成を行います。
今回は「一から作成」を行います。
「ホスト」にDev TunnelsのURLを入力します。
要求と応答を入力して、定義の作成を行います。
コネクタを作成して、テストを行います。
問題なければ以下のように応答が返ってくるはずです。
Power Appsから呼び出してみる
先ほど作成したカスタム コネクタをPower Appsに追加して呼び出してみます。
問題なければ以下のようなテーブルが得られるはずです。
APIのデバッグを行う
Power AppsやPower Automateから呼び出したカスタム コネクタのデバッグを行うことも可能です。
やり方は、Visual Studioで「デバッグの開始」(F5)を行い、カスタム コネクタの呼び出しを行うだけです。
後は、通常の開発時のデバッグの時のように確認したい箇所にブレークポイントを設定しておくだけです。
作成したAPIがカスタム コネクタから呼び出した場合に想定通りに呼び出されない場合などの検証時に利用できますね。
APIの更新を行う
通常の開発時と同様にホットリロードによる更新も可能です。
モデル クラスの追加
こちらを参考に行います。
ソリューション エクスプローラーにてプロジェクトを右クリックして、「追加」 > 「新しいフォルダー」を選択します。
作成されたフォルダーを「Models」にリネームし、右クリックして、「追加」 > 「クラス」を選択します。
「TodoItem」という名前のクラスを追加します。
以下コードに更新します。
namespace TodoApi.Models; public class TodoItem { public long Id { get; set; } public string? Name { get; set; } public bool IsComplete { get; set; } }
データベース コンテキストの追加
先ほど「TodoItem」クラスを追加したときと同様の方法で続いては、「TodoContext」クラスの追加を行います。
追加したクラスには以下のコードに置き換えます。
using Microsoft.EntityFrameworkCore; namespace TodoApi.Models; public class TodoContext : DbContext { public TodoContext(DbContextOptions<TodoContext> options) : base(options) { } public DbSet<TodoItem> TodoItems { get; set; } = null!; }
データベース コンテキストの登録
Program.cs
を以下のコードで更新します。
using Microsoft.EntityFrameworkCore; using TodoApi.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); builder.Services.AddDbContext<TodoContext>(opt => opt.UseInMemoryDatabase("TodoList")); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
追加されたのは以下3行です。
+ using Microsoft.EntityFrameworkCore; + using TodoApi.Models; var builder = WebApplication.CreateBuilder(args); // Add services to the container. builder.Services.AddControllers(); + builder.Services.AddDbContext<TodoContext>(opt => + opt.UseInMemoryDatabase("TodoList")); // Learn more about configuring Swagger/OpenAPI at https://aka.ms/aspnetcore/swashbuckle builder.Services.AddEndpointsApiExplorer(); builder.Services.AddSwaggerGen(); var app = builder.Build(); // Configure the HTTP request pipeline. if (app.Environment.IsDevelopment()) { app.UseSwagger(); app.UseSwaggerUI(); } app.UseHttpsRedirection(); app.UseAuthorization(); app.MapControllers(); app.Run();
コントローラーのスキャフォールディング
「Controller」フォルダを右クリックして、「追加」 > 「新規スキャフォールディングアイテム」を選択します。
「Entity Framework を使用したアクションがある API コントローラー」を選択して「追加」を選択します。
ダイアログが表示されるので、以下を選択して「追加」を行います。
- モデル クラス: 「TodoItem (TodoApi.Models)」 を選択します。
- データ コンテキスト クラス: 「TodoContext (TodoApi.Models)」 を選択します。
追加が行われるとコントローラー名で設定したコントローラーが追加されます。
スクショの例でいうと TodoItemsController.cs
が追加されます。
PostTodoItem 作成メソッドの更新
nameof 演算子を使用するために、PostTodoItem
で return ステートメントを更新します。
TodoItemsController.cs
の l: 78 あたりを以下のように変更します。
[HttpPost] public async Task<ActionResult<TodoItem>> PostTodoItem(TodoItem todoItem) { _context.TodoItems.Add(todoItem); await _context.SaveChangesAsync(); // return CreatedAtAction("GetTodoItem", new { id = todoItem.Id }, todoItem); return CreatedAtAction(nameof(GetTodoItem), new { id = todoItem.Id }, todoItem); }
ホットリロード
Alt + F10 もしくはホットリロードボタンを選択して、ホットリロードを行います。
その結果、Webアプリの更新が行われるはずです。
テスト
PostTodoItem のテスト
POST /api/TodoItems
のテストを行います。
Bodyに以下JSONを設定して実行を行います。
{ "name": "walk dog", "isComplete": true }
その結果以下アイテムが追加されます。
Locationヘッダー URI のテスト
GET /api/TodoItems/{id}
のテストを行います。
先ほど作成されたアイテムの id
を指定して実行を行います。
その結果、先ほど作成されたアイテムが取得されるはずです。
存在しないアイテムを指定した場合、 404 が返ってくるはずです。
GETメソッドのテスト
GET /api/TodoItems
のテストを行います。
このメソッドではアプリ実行中に追加されたアイテムをすべて返します。
PutTodoItem メソッドのテスト
PUT /api/TodoItems/{id}
のテストを行います。
このメソッドでは指定した id
のアイテムの更新を行います。
DeleteTodoItem メソッドのテスト
DELETE /api/TodoItems/{id}
のテストを行います。
このメソッドでは指定した id
のアイテムの削除を行います。
カスタム コネクタの更新を行う
Power Appsにアクセスして、「カスタム コネクタ」の編集を行います。
先ほど追加したアクションの定義を追加します。
カスタム コネクタを利用中のアプリでは、カスタム コネクタの更新がないので、一度削除してから再度追加を行います。
問題なくアクションが呼び出せていることを確認します。
関連記事
こちらもよければご参照ください。
おわりに
カスタム コネクタの作成練習だけでなく、自社でAPI開発を行い、そのAPIをPower Platformで利用させたい場合この技術を開発者側は知っていた方が、よりトラブルなくカスタム コネクタの組織への展開ができるようになるかと思います。
プロ開発者と市民開発者とで開発するリソースを分担し、組織の内の開発を効率的に進めましょう!