[VB.NET] REST API⑥ GETリクエストの応答をモデル(クラス)にする
クラスの追加
まずはモデルクラスを追加します。
ソリューションエクスプローラで、「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形式で取得できます。