私は初めてSuaveをプレイしてきましたが、私が理解していないことがはっきりとあります。 私は何を達成しようとしていることは簡単なのREST APIを実装することです:ネスティング・サヴァWebPart
- ユーザーは、金融商品
- に関する情報は、さらに、すべての機器は今の価格について
のリストを持ってもらうことができます簡単に私はGETメソッドのみに焦点を当てています。コードの
マイ非常に基本的な部分はここにある:
[<AutoOpen>]
module RestFul =
let JSON v =
let jsonSerializerSettings = new JsonSerializerSettings()
jsonSerializerSettings.ContractResolver <- new CamelCasePropertyNamesContractResolver()
JsonConvert.SerializeObject(v, jsonSerializerSettings)
|> OK
>=> Writers.setMimeType "application/json; charset=utf-8"
let fromJson<'a> json =
JsonConvert.DeserializeObject(json, typeof<'a>) :?> 'a
let getResourceFromReq<'a> (req : HttpRequest) =
let getString rawForm = System.Text.Encoding.UTF8.GetString(rawForm)
req.rawForm |> getString |> fromJson<'a>
type RestResource<'a> = {
GetById : int -> 'a option
GetPricesById : int -> 'a option
}
let rest resource =
let handleResource requestError = function
| Some r -> r |> JSON
| _ -> requestError
let getResourceById =
resource.GetById >> handleResource (NOT_FOUND "Resource not found")
let getPricesById =
resource.GetPricesById >> handleResource (NOT_FOUND "Resource not found")
choose [
GET >=> pathScan "/instrument/%d" getResourceById
GET >=> pathScan "/instrument/%d/prices" getPricesById
]
module Main =
[<EntryPoint>]
let main argv =
let webPart = rest {
GetById = fun i -> Some i // placeholder
GetPricesById = fun i -> Some i // placeholder, it'll be a list eventually
}
startWebServer defaultConfig webPart
0
私はこのようにWebパーツを定義します。
choose [
GET >=> pathScan "/instrument/%d" getResourceById // Returns the instrument static data
GET >=> pathScan "/instrument/%d/prices" getPricesById // Returns price list for the instrument
]
その後、すべてが正常に動作します。ウェブパーツを入れ子にする方法があるかどうかは疑問だ。
また、私がRestAPIについて知っているように、私の推論にはギャップがあるかもしれません。私はそういう意味でネスト価格のエンドポイントは、価格が楽器の財産とみなされていることを単に明らかにしていると思います。
これは動作しません。あなたは "現在の要求"という概念を放棄しなければなりません。 Suaveにはこのようなことはありません。それはすべての機能構成です。 –