simotin13's message

simotin13といいます。記事の内容でご質問やご意見がありましたらお気軽にコメントしてください\^o^/

C#でJSONフォーマットのWebAPIを呼び出す

C#JSONフォーマットのWebAPIを呼び出したいと思ったのですが、ちょっとてこずったので備忘録として挙げておきます。

調べてみるとHTTP通信にはHttpClientが便利という記事が多かったので私もHttpClient(.Net 4.5以上ですが)を使ってみました。

また、今回呼び出したいWebAPIはリクエストのbody部にjsonフォーマットのパラメータを指定するAPIだったのでC#JSONシリアライズ(文字列)の方法を調べてみました。
結果、JavaScriptSerializerというクラスを使うと文字列にシリアライズできそうだったのでJSONシリアライズにはJavaScriptSerializerを使っております。
※JavaScriptSerializerって名前にはちょっとひっかかりますが、でもJSONってJavascript Object Notationの略だから名前的には正しいんだろうな。

参照設定は、

  • System.Net.Http;
  • System.Web.Extensions

を追加する必要があります。

PostメソッドのWebAPIを呼び出すコードはこんな感じになりました。

using System;
using System.Collections.Generic;
using System.Text;
using System.Net.Http;
using System.Collections;
using System.Web.Script.Serialization;
namespace HttpClientSample
{
    class Program
    {
        static void Main(string[] args)
        {
            var client = new HttpClient();

            // Basic認証を使うときはこんな感じでヘッダー部を設定
            var byteArray = Encoding.ASCII.GetBytes(string.Format("{0}:{1}", "user", "password"));
            client.DefaultRequestHeaders.Authorization = new
                System.Net.Http.Headers.AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));

            var param = new Hashtable();
            param["hoge"] = 123;                           // 数値型のパラメータ
            param["foo"] = "test";                         // 文字列型のパラメータ
            var serializer = new JavaScriptSerializer();
            var json = serializer.Serialize(param);
            Console.WriteLine(json);

            var content = new StringContent(json);

            var response = client.PostAsync("http://hogehoge/api/api_name", content).Result;
            Console.WriteLine(response );
        }
    }
}

感想

HttpClientでHTTPリクエストのコーディングが楽になったという記事が多かったですがWeb系開発で使われる言語と比べるとそうでもないような気がします。
HttpClientは非同期処理に対応しているとのことでしたが awaitの指定とかTaskクラスの使い方とかよく分かっていません。
時間があるときにきちんと勉強しておきたいと思います。

C#の進化のスピードは速いのでちょっと勉強しないでいるとすぐにおいて行かれますね。

私の場合C#の勉強に関しては、

  1. とりあえず使いたい機能をネットで調べてみる
  2. 機能について理解できれば自分のやりたいコードに落としてみる
  3. よく理解できていなければC#の書籍できちんと勉強しなおしてみる

という手順を踏むのがこのところの流れになっています。

機能に関してきちんと理解しておきたい場合はパーフェクトC#

改訂3版 パーフェクトC# (PERFECT SERIES 1)

改訂3版 パーフェクトC# (PERFECT SERIES 1)

を読むことが多いです。C#の技術書はたくさん出ていますがパーフェクトC#は比較的最近の機能についてまでカバーされているのでいいですね。

追記

感想で、awaitとかTaskの使い方がよく分かっていませんと書きましたが上記のパーフェクトC#を読んできちんと勉強してみました。
Task,await,asyncといったキーワードの使い方は、それほど難しい機能ではありませんでしたが、未知のキーワードが出てくるとついつい億劫な気持ちになって後回しにしてしまいますね・・・

mcommit.hatenadiary.com