動物を見付けるアプリケーションを作成する
RESTful APIは同じURLを使うが,HTTPメソッドによっては異なる応答をする.GenerateHTTPResponseは再帰的に動作するので,Delayedの計算は,位置レポートのWebアプリケーションを実装する異なるHTTPメソッドを扱うために異なるAPIFunctionを返すことがある.
さまざまなタイプの動物が見付かった位置を集める簡単なアプリを作成する.
In[1]:=
animallocator = Delayed[
With[{query = HTTPRequestData["Query"]},
Switch[HTTPRequestData["Method"],
"POST",
APIFunction[{"what" -> "Animal",
"where" -> "Location" :> $GeoLocation},
(PutAppend[{#where, #what}, "locations.m"];
"Thank you for your submission.") &],
"GET",
APIFunction[{"zoom" -> Restricted["Integer", {1, 18}] -> 14},
GeoGraphics[
Map[GeoMarker[First[#], Tooltip[Last[#]["Image"], Last[#]],
"Scale" -> Offset[80]] &,
Quiet[Check[ReadList["locations.m"], {}]]],
GeoZoomLevel -> #zoom, ImageSize -> 700] &, "PNG"],
_, HTTPErrorResponse[400]
]
]];
動物発見のレポートをシミュレーションする.
In[2]:=
GenerateHTTPResponse[
animallocator, <|"Method" -> "POST",
"Query" -> {"what" -> "coyote", "where" -> "40.083449,-88.200732"}|>];
GenerateHTTPResponse[
animallocator, <|"Method" -> "POST",
"Query" -> {"what" -> "buffalo",
"where" -> "40.140722, -88.195257"}|>];
GenerateHTTPResponse[
animallocator, <|"Method" -> "POST",
"Query" -> {"what" -> "beaver", "where" -> "40.063029,-87.9870"}|>];
GenerateHTTPResponse[
animallocator, <|"Method" -> "POST",
"Query" -> {"what" -> "reindeer", "where" -> "40.29778, -88.2023"}|>];
GenerateHTTPResponse[animallocator, <|"Method" -> "POST",
"Query" -> {"what" -> "gopher", "where" -> "40.116420,-88.243383"}|>]
Out[2]=
結果を取ってくる様子をシミュレーションする.
In[3]:=
ImportString[GenerateHTTPResponse[animallocator]["Body"], "PNG"]
Out[3]=