[VB.NET] REST API⑥ GETリクエストの応答をモデル(クラス)にする

2021年10月7日

GETメソッドの応答をモデル(クラス)にしてみましょう。
APIプロジェクトの作成方法についてはこちらで紹介していますので参照してください。
また、このサンプルでは以前作成した「ApiTestController」というコントローラーを使用しています。
コントローラーの追加方法はこちらで紹介していますので参照してください。

クラスの追加

まずはモデルクラスを追加します。
ソリューションエクスプローラで、「Models」を右クリックして表示されるメニューから、
「追加」>「クラス」を選択します。

クラス名を入力し、「追加」をクリックします。
このサンプルでは、クラス名を「Record」としました。

追加されたクラスにコードを書き込みます。
この例では、col1、col2、col3というプロパティを書き加えています。

コード

'結果レコード
Public Class Record
    Public Property col1 As Integer
    Public Property col2 As String
    Public Property col3 As DateTime

End Class

GETメソッドの戻り値をモデル(クラス)に変更

次に、コントローラーのGETメソッドを、先ほど追加したモデルクラス(Record)を返すように変更していきます。
デフォルトのGETメソッド を確認してみましょう。
「GetValue」がString型、 「GetValues」はStringの列挙型になっています。

コード

    ' GET api/ApiTest
    Public Function GetValues() As IEnumerable(Of String)
        Return New String() {"value1", "value2"}
    End Function

    ' GET api/ApiTest/5
    Public Function GetValue(ByVal id As Integer) As String
        Return "value"
    End Function

Record型を返すようにコードを書き換えます。
GETメソッド を「GetValue」はRecord型に 、 「GetValues」はRecordのList型を返すように書き換えます。
実際の場面ではデータベースやファイルから取得したデータを返すことになると思いますが、
このサンプルではメソッド内でダミーデータを作成して応答しています。

Imports System.Net
Imports System.Web.Http

Namespace Controllers
    Public Class ApiTestController
        Inherits ApiController
        ' GET: api/ApiTest
        Public Function GetValues() As List(Of record)

            '結果リスト作成
            Dim lst As New List(Of Record)

            'レコード作成
            Dim rec As New record
            rec.col1 = 1
            rec.col2 = "This is a test record."
            rec.col3 = New Date(2021, 1, 1)

            'リストにレコードを追加
            lst.Add(rec)

            '結果リストをリターン
            Return lst
        End Function

        ' GET: api/ApiTest/5
        Public Function GetValue(ByVal id As Integer) As record

            'レコード作成
            Dim rec As New record
            rec.col1 = id
            rec.col2 = "This is a test record."
            rec.col3 = New Date(2021, 1, 1)

            '結果レコードをリターン
            Return rec
        End Function

        ' POST: api/ApiTest
        Public Sub PostValue(<FromBody()> ByVal value As String)

        End Sub

        ' PUT: api/ApiTest/5
        Public Sub PutValue(ByVal id As Integer, <FromBody()> ByVal value As String)

        End Sub

        ' DELETE: api/ApiTest/5
        Public Sub DeleteValue(ByVal id As Integer)

        End Sub
    End Class
End Namespace

実行して確認する

では、APIを実行してみましょう。実行方法はこちらで紹介しています。
実際にコントローラー(ApiTestController)のGETメソッドを呼び出して、ブラウザに結果を出力してみましょう。
GETメソッド内で設定したRecordクラスの内容がJson形式で出力されています。

2021.09.17追記
このサンプルではブラウザでJson表示したいので、「WebApiConfig.vb」でJsonFormatterに"text/html"を追加しています。

今回はGETメソッドの戻り値をモデル(クラス)にしてみました。
実際の場面では、プリミティブ型やDictionary型よりもモデルクラスで応答する方が多いと思います。
結果は、特に何も指定しなくてもJSON形式で取得できます。

GETASP.NET,REST API,VB.NET

Posted by itblogks