Das quelloffene Projekt Swagger.WebApiProxy [1] bietet dem Entwickler die Möglichkeit, aus einer Swagger-basierten Beschreibung [2] eines RESTful Services bzw. einer Web API einen clientseitigen Proxy zu generieren.
Die einfachste Art, diese Community-Erweiterung zu nutzen, besteht darin es von Github [1] herunterzuladen und das sich unterhalb des Ordners src befindliche Projekt Swagger.WebApiProxy.Template in die eigene Solution einzubinden. Zwar ist es auch möglich, via NuGet zu beziehen. Allerdings geht dies mit der Notwendigkeit einer unter [1] beschriebenen manuellen Änderung der genutzten Projektdatei einher.
Das Projekt Swagger.WebApiProxy.Template besteht im Wesentlichen aus einer T4-Datei, welche sich um das Generieren der gewünschten Client-seitigen Proxys kümmert. Die dazu nötigen Informationen bezieht sie aus der Datei SwaggerApiProxy.tt.settings.xml, in die unter anderem die URL des Swagger-Dokuments sowie der Namensraum, in dem der Proxy generiert werden soll, einzutragen ist. Das nächste Listing demonstriert dies. Das Element Url spiegelt die Url des Dokuments wieder und das Element Namespace den gewünschten Namensraum. Unter Id findet man einen Bezeichner für die Web API. Die restlichen Elemente wurden aus der mitgelieferten Beispieldatei ohne Änderung übernommen.
<SwaggerApiProxySettings>
<EndPoints>
<EndPoint>
<Id>SwaggerServer</Id>
<Url>http://localhost:59458/swagger/docs/v1</Url>
<Namespace>SwaggerServer</Namespace>
<Suffix>WebProxy</Suffix>
<BaseProxyClass>Swagger.WebApiProxy.Template.BaseProxy</BaseProxyClass>
<ProxyConstructorSuffix>(Uri baseUrl) : base(baseUrl)</ProxyConstructorSuffix>
<ParseOperationIdForProxyName>false</ParseOperationIdForProxyName>
<AppendAsyncToMethodName>false</AppendAsyncToMethodName>
</EndPoint>
</EndPoints>
</SwaggerApiProxySettings>
Anschließend kann man mit dem generierten Proxy auf die Web API zugreifen. Das nächste Listing veranschaulicht dies, indem es zwei beispielhafte Service-Operationen, GetHotel und FindHotelsBySterne, anstößt.
HotelWebProxy proxy = new HotelWebProxy(new Uri("http://localhost:59458"));
var hotel = proxy.Hotel_GetHotel(1).Result;
var hotels = proxy.Hotel_FindHotelsBySterne(3).Result;
Links