xin9le.net

Microsoft の製品/技術が大好きな Microsoft MVP な管理人の技術ブログです。

Web API

Azure App Service の Always On リクエストにのみ応答する

Azure App Service を使っている場合、特に本番環境では Always On を有効化することになると思います。日本語の Azure Portal だと「常時接続」と表記されるもので、一定間隔でホストしている Web アプリに対してリクエストを投げることで、アプリがアイド…

Slack.Integration - Slack 連携ライブラリを公開しました

もはや 2 番煎じ、3 番煎じどころか 10 番煎じくらいのものですが、.NET アプリと Slack を繋ぐライブラリ Slack.Integration を作成し、公開しました!現時点では Incoming Webhook *1 にだけ対応していますが、そのうち Slash Command にも対応させる予定…

gRPC / MagicOnion 入門 (17) - 切断検知と自動再接続

gRPC はサーバーとクライアントが常時コネクションを張っている状態です。このコネクションが切断されたタイミングを検知して後処理や再接続処理をしたい、というのはよくパターンかと思います。実は、生の gRPC で切断検知をするのは実はかなり面倒です。Ma…

gRPC / MagicOnion 入門 (16) - 複数ユーザーへのプッシュ配信

前回は Unary 通信中にサーバープッシュをする方法を解説しました。しかしそれは 1 つのクライアントに対してプッシュ配信する例だったので、今回は複数クライアントに対してプッシュする方法について見ていきます。 勘のいい方にはパッと分かるかもしれませ…

gRPC / MagicOnion 入門 (15) - Unary 通信中にプッシュ配信

gRPC におけるサーバーからの Push 通知は Server Streaming 通信を用いて行う、というのを以前解説しました。 ですが、この方法では Server Streaming 専用の API を呼び出さないと Push 通知が行われません。一般的には、何か単発の API (gRPC だと Unary)…

gRPC / MagicOnion 入門 (14) - 接続ユーザーを特定する

gRPC で通信を行う際、サーバー側でアクセスしてきているユーザーを特定したいケースは多々あります。これを実現する最も基本的で素朴な方法が、gRPC / MagicOnion 入門 (10) - ヘッダーの利用 で解説したヘッダーにユーザー固有の ID を埋め込むことです。 …

gRPC / MagicOnion 入門 (13) - 送受信されているデータを可視化する

gRPC に限った話ではありませんが、ネットワークを介して送受信しているデータをダンプして目視確認したいことは頻繁にあります。このようなとき、たいてい以下のような方法が採られます。 用途 実装 個別 ダンプしたい箇所にデバッグコードを仕込む 全体 全…

gRPC / MagicOnion 入門 (12) - ログを出力する

アプリケーション開発においてログの出力は非常に重要です。どこで、どのようなことが起こったのかを知る手がかりになります。gRPC には標準でログを出力するための機構が備わっているので、今回はそれを使ってログ出力をしてみます。 コンソールにログを出…

gRPC / MagicOnion 入門 (11) - 通信可能なデータ量を変更する

gRPC でデータを送受信するにあたり、どこまでのサイズが許容されるのか。今回はそのあたりの制限と、その緩和について見ていきます。 既定の通信データ量の制限 gRPC のフレームワークは 1 度の通信で送受信できるデータ容量に制限を設けています。既定では…

gRPC / MagicOnion 入門 (10) - ヘッダーの利用

HTTP/2 をベースとする gRPC にもヘッダーがあり、そこに任意のデータを含めて通信することができます。今回はそんなヘッダーをどうやって利用するのか、その方法について解説します。 ヘッダーにデータを詰めて送信する ヘッダーは Key-Value 形式となって…

gRPC / MagicOnion 入門 (9) - 明示的にステータスコードを返す

HTTP/1.1 にステータスコードというレスポンスの意味を表す数値があったように、HTTP/2 をベースとする gRPC にもステータスコードがあります。これまでの解説ではレスポンスとして正常値のみを返していたので、HTTP/1.1 のステータスコードで言うところの 2…

gRPC / MagicOnion 入門 (8) - 独自型を送受信する

ここまで gRPC / MagicOnion を基本的な通信方法について見てきました。しかし、送受信に利用した型はすべて Primitive 型ばかりでした。独自に定義した型で通信したいと思うのは当然!ということで、今回は独自型でサーバー / クライアント間のやり取りをす…

gRPC / MagicOnion 入門 (7) - Duplex Streaming 通信

前回、前々回と Server Streaming 通信と Client Streaming 通信について解説してきました。今回はこれらを合わせた通信方法である Duplex Streaming 通信について見ていきます。 Step.1 - サービス定義 いつも通り、まずサーバー側で提供するサービスのイン…

gRPC / MagicOnion 入門 (6) - Client Streaming 通信

前回は Server Streaming 通信について見ていきました。今回は Client 側から連続的にデータ送信を行う Client Streaming について解説していきます。 Step.1 - サービス定義 今回もまずサーバー側で提供するサービスのインターフェースを定義します。例えば…

gRPC / MagicOnion 入門 (5) - Server Streaming 通信

前回は最も簡単な Unary 通信について解説しました。今回はサーバーからのプッシュ配信を行うための Server Streaming 通信について見ていきます。 Step.1 - サービス定義 まずサーバー側で提供するサービスのインターフェースを定義します。例えば以下のよ…

gRPC / MagicOnion 入門 (4) - Unary 通信

ここから実際に gRPC で API を作成し、クライアント/サーバー間で通信していきます。まず「gRPC / MagicOnion 入門 (2) - 4 種類の通信方式」で紹介した最も簡単な Unary 通信から見て行きます。 Step.1 - サービス定義 最初のステップでは、サーバー側にど…

gRPC / MagicOnion 入門 (3) - プロジェクト構造と実装の前準備

今回は MagicOnion を使った API 開発を行うまでの前準備にフォーカスを当てます。主に Console / WinForms / WPF アプリなど向けです。MagicOnion は Unity にも対応していますが、これはだいぶ大変でややこしいので別途解説することにします。 基本的なプ…

gRPC / MagicOnion 入門 (2) - 4 種類の通信方式

gRPC は HTTP/2 の仕様に則った形で 4 種類の通信方式を提供しています。以下のドキュメントにも解説がありますが、簡単に図解します。 Unary RPCs 最もシンプルな 1 リクエスト / 1 レスポンス型の通信方法です。通常の関数コールのように扱えるため、非常…

gRPC / MagicOnion 入門 (1) - 概要

gRPC は Google が開発している HTTP/2 ベースの RPC 通信フレームワークで、以下のような特徴を備えています。 Protocol Buffers を利用したサービス定義 多数のプラットフォーム/言語をサポート HTTP/2 ベースの高パフォーマンスなストリーミング通信 統合…

gRPC / MagicOnion 入門

HTTP/2 をベースとした通信フレームワーク gRPC と、その高レベルラッパーである MagicOnion についての連載インデックス インデックス 概要 4 種類の通信方式 プロジェクト構造と実装の前準備 Unary 通信 Server Streaming 通信 Client Streaming 通信 Dupl…

Azure Function で Slash Commands 作ってみた

//build/ 2016 の Day 2 キーノートで Azure Function という機能が発表されました。Amazon Web Services を使っている方には Azure 版の Lambda と言えば分かりやすいでしょうか。コードをそのまま登録しておけば Web API が実装できてしまうという、超絶カ…

Cloud Translator - Slash Commands によるお手軽翻訳 -

最近は ChatOps って素晴らしいなぁと思う日々を送っております。会社でも導入されていて bot に話しかける楽しさなんかを感じています。巷では Slack が大流行りなのでそういう体験をされている方もきっと多いと思います。 Slack の良いところは生の API を…

Web APIでリクエスト単位のキャッシュを利用する

ASP.NET Web APIで開発している際、パフォーマンスを上げるためにリクエスト中で取得/生成した値をキャッシュして使い回したいケースがあります。特にWeb APIにはHTTP Message Handlerという機構があるので、外側のレイヤー (Handler) で共通処理として認証…

ActionFilter属性を利用した簡易時間計測

One ASP.NET Advent Calendar 2013の19日目担当、今年4度目の登場@xin9leです。そろそろ完全に大顰蹙のような気がしていますが、気にしないことにして...。今回は大好きなSignalRのお話ではなく、ASP.NET MVCやWeb APIにあるAction Filterを使った処理時間の…

Web APIからSignalRへの連携

One ASP.NET Advent Calendar 2013も17日目になりました。すでに3度目の登場です、@xin9leです。ASP.NET/IISのMVPさんよりも多く登場していて場違い感を多少なり感じておりますが、今回も飽き足らずSignalRのネタで攻めます。ご了承ください。 最近の体験談 …

Web APIでPUT/DELETEに失敗するときの対処

ひと月ほど前、仕事でASP.NET Web APIを使った開発をしていたときでした。コントローラーにキチンとCRUDを実装し、開発環境のIIS Expressで動作確認も無事終え、部内のテストサーバーのIISにホストしました。そしてそのAPIを利用することになっている同僚に…