C# サンプル集 |
Visual Basic 中学校 > C# サンプル集 > C# サンプル集目次 >
REST WebAPIを呼び出す
2021/1/10
目次
GET のWebAPIを呼び出す
string url =
"https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare"; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result) { string responseBody = response.Content.ReadAsStringAsync().Result; System.Diagnostics.Debug.WriteLine(responseBody); } } |
メモ:この例では人物情報のWebAPIを呼び出して Shakespeare(シェークスピア)の情報を取得します。 → 人物情報のWebAPIについてはこちら
実行するとこのように出力されます。
{"success":true,"data":{"name":"Shakespeare","note":"Hamlet","age":13,"registerDate":"1564-04-26T20:21:00"}} |
GET のWebAPIを呼び出してJSONの戻り値を解析する
この例では、WebAPIを呼び出して、レスポンスとして取得した戻り値のJSONを解析して、そこに含まれる name・note・age・registerDateの各値を抜き出します。
この例を実行するには、NuGet で NewtonSoft.JSON をインストールする必要があります。 → その方法
string url =
"https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare"; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result) { //生のレスポンス全体を文字列で取得 string responseBody = response.Content.ReadAsStringAsync().Result; //レスポンスの文字列をJSONとして解析されたJObjectとして取得。 dynamic oResponse = Newtonsoft.Json.JsonConvert.DeserializeObject(responseBody); //レスポンスに含まれる各値を取得。 bool success = oResponse.success; string dataName = oResponse.data.name; string dataNote = oResponse.data.note; int dataAge = oResponse.data.age; DateTime dataRegisterDate = oResponse.data.registerDate; //各値を出力 System.Diagnostics.Debug.WriteLine($"呼び出し成功 = {success}"); System.Diagnostics.Debug.WriteLine($"名前 = {dataName}"); System.Diagnostics.Debug.WriteLine($"備考 = {dataNote}"); System.Diagnostics.Debug.WriteLine($"年齢 = {dataAge}"); System.Diagnostics.Debug.WriteLine($"登録日時 = {dataRegisterDate}"); } } |
メモ:この例では人物情報のWebAPIを呼び出して Shakespeare(シェークスピア)の情報を取得します。 → 人物情報のWebAPIについてはこちら
POST のWebAPIを本文を設定して呼び出す
string url =
"https://umayadia-apisample.azurewebsites.net/api/persons"; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { string jsonText = "{\"name\":\"卑弥呼\",\"note\":\"邪馬台国\",\"age\":75,\"registerDate\":\"0204-01-01T02:03:04\"}"; var requestContent = new System.Net.Http.StringContent(jsonText, System.Text.Encoding.UTF8, "application/json"); using (System.Net.Http.HttpResponseMessage response = client.PostAsync(url, requestContent).Result) { string responseBody = response.Content.ReadAsStringAsync().Result; System.Diagnostics.Debug.WriteLine(responseBody); } } |
メモ:この例では人物情報のWebAPIを呼び出して 卑弥呼(ひみこ) を登録します。人物情報のWebAPIでは、POSTの本文にJSON形式で人物情報を設定することで新しい人物を登録できます。 → 人物情報のWebAPIについてはこちら
メモ:人物情報のWebAPIではブラウザーに下記URLを入力すると、登録されている全人物が表示されます。これを使って正しく登録されているか確認できます。
https://umayadia-apisample.azurewebsites.net/api/persons
メモ:人物情報のWebAPIでは、レスポンスの success が false の場合処理に失敗しています。この場合、レスポンスの errorMessage で失敗した原因がわかることがあります。このサンプルでは Debug.WriteLine でレスポンスを出力しています。
下記は、人物情報のWebAPIでのエラーレスポンスの例です。
{"success":false,"errorCode":"AE101","errorMessage":"nameの文字数が多すぎます。20文字以内にしてください。"} |
PUT のWebAPIを本文を設定して呼び出す
string url =
"https://umayadia-apisample.azurewebsites.net/api/persons/平賀源内"; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { string jsonText = "{\"name\":\"平賀源内\",\"note\":\"エレキテル\",\"age\":26,\"registerDate\":\"1728-01-01T00:00:00\"}"; var requestContent = new System.Net.Http.StringContent(jsonText, System.Text.Encoding.UTF8, "application/json"); using (System.Net.Http.HttpResponseMessage response = client.PutAsync(url, requestContent).Result) { string responseBody = response.Content.ReadAsStringAsync().Result; System.Diagnostics.Debug.WriteLine(responseBody); } } |
メモ:この例では人物情報のWebAPIを呼び出して 平賀源内 の情報を更新します。デフォルトでは年齢が24歳なのを26歳にします。人物情報のWebAPIでは、PUTの本文にJSON形式で人物情報を設定することで、URLで指定した人物の情報を更新できます。→ 人物情報のWebAPIについてはこちら
メモ:誰かが平賀源内を削除していた場合、この処理は失敗します。
メモ:人物情報のWebAPIではブラウザーに下記URLを入力すると、登録されている全人物が表示されます。これを使って正しく登録されているか確認できます。
https://umayadia-apisample.azurewebsites.net/api/persons
メモ:人物情報のWebAPIでは、レスポンスの success が false の場合処理に失敗しています。この場合、レスポンスの errorMessage で失敗した原因がわかることがあります。このサンプルでは Debug.WriteLine でレスポンスを出力しています。
下記は、人物情報のWebAPIでのエラーレスポンスの例です。
{"success":false,"errorCode":"AE101","errorMessage":"nameの文字数が多すぎます。20文字以内にしてください。"} |
DELETE のWebAPIを呼び出す
string url =
"https://umayadia-apisample.azurewebsites.net/api/persons/彦坐王"; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { using (System.Net.Http.HttpResponseMessage response = client.DeleteAsync(url).Result) { string responseBody = response.Content.ReadAsStringAsync().Result; System.Diagnostics.Debug.WriteLine(responseBody); } } |
メモ:この例では人物情報のWebAPIを呼び出して 彦坐王(ひこいますのおう。実在すれば2世紀か3世紀頃の人物)を削除します。→ 人物情報のWebAPIについてはこちら
メモ:彦坐王が登録されていない場合、次のエラーレスポンスを出力します。
{"success":false,"errorCode":"DE101","errorMessage":"彦坐王は存在しないため削除できません。"} |
OPTIONS のWebAPIを呼び出す
string url =
"https://umayadia-apisample.azurewebsites.net/api/persons"; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { var request = new System.Net.Http.HttpRequestMessage(System.Net.Http.HttpMethod.Options, url); using (System.Net.Http.HttpResponseMessage response = client.SendAsync(request).Result) { string responseBody = response.Content.ReadAsStringAsync().Result; System.Diagnostics.Debug.WriteLine(responseBody); } } |
メモ:この例では人物情報のWebAPIを呼び出して persons リソースに対して有効なメソッドの一覧を取得します。→ 人物情報のWebAPIについてはこちら
実行するとこのように出力されます。
{"success":true,"data":["GET api/<PersonsController> :すべての人物の一覧を取得します。","GET api/<PersonsController>/{name} :{name}で指定された人物を取得します。","POST api/<PersonsController> :人物を追加します。ボディにJSON形式で人物を指定します。","PUT api/<PersonsController>/{name} :{name}で指定された人物を変更します。ボディにJSON形式で変更後の人物の値を指定します。","DELETE api/<PersonsController>/{name} :{name}で指定された人物を削除します。","DELETE api/<PersonsController>/all/reset :すべての人物を初期状態に戻します。すべての変更は失われます。","OPTIONS api/<PersonsController> :personsに対して有効なメソッドの一覧を取得します。"]} |
認証が必要なプロキシーを経由して WebAPIを呼び出す
認証が必要なプロキシーを使用している環境では、次のようにプロキシーの情報を設定します。
※私はプロキシー環境下でこのプログラムの動作を確認していないので、何かうまく動かない可能性もあります。多分動くと思いますが・・・。
string url =
"https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare"; var handler = new System.Net.Http.HttpClientHandler(); handler.Proxy = System.Net.WebRequest.GetSystemWebProxy(); //Windowsで設定されているプロキシー情報からプロキシーを取得します。 //handler.Proxy = new System.Net.WebProxy("http://proxy.mycompany.net", 8080); //←必要ならプロキシーのアドレスを指定することもできます。 handler.Proxy.Credentials = new System.Net.NetworkCredential("username", "password"); //handler.Proxy.Credentials = new System.Net.NetworkCredential("username", "password","company"); //←必要ならドメイン名も指定します。この場合、company\username として表記に見慣れているかもしれません。 handler.UseProxy = true; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient(handler)) { using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result) { string responseBody = response.Content.ReadAsStringAsync().Result; System.Diagnostics.Debug.WriteLine(responseBody); } } |
メモ:この例では人物情報のWebAPIを呼び出して Shakespeare(シェークスピア)の情報を取得します。 → 人物情報のWebAPIについてはこちら
実行するとこのように出力されます。
{"success":true,"data":{"name":"Shakespeare","note":"Hamlet","age":13,"registerDate":"1564-04-26T20:21:00"}} |
参考:HTTPS(SSL)のバージョンを指定する。たとえば、TLS 1.2 や TLS 1.3
SSLのバージョンを指定するには System.Net.ServicePointManager.SecurityProtocol を使用します。そのほかの部分は変更する必要はありません。
//TLS1.2またはTLS1.3を使用するように指定する。 System.Net.ServicePointManager.SecurityProtocol = System.Net.SecurityProtocolType.Tls12 | System.Net.SecurityProtocolType.Tls13; string url = "https://umayadia-apisample.azurewebsites.net/api/persons/Shakespeare"; using (System.Net.Http.HttpClient client = new System.Net.Http.HttpClient()) { using (System.Net.Http.HttpResponseMessage response = client.GetAsync(url).Result) { string responseBody = response.Content.ReadAsStringAsync().Result; System.Diagnostics.Debug.WriteLine(responseBody); } } |
参考
.NET Framework でのトランスポート層セキュリティ (TLS) のベスト プラクティス | Microsoft Docs