diff --git a/README.md b/README.md index 49891c8e0..3c1221d34 100644 --- a/README.md +++ b/README.md @@ -3,23 +3,87 @@ # OpenAPI.NET [Preview] [ Disclaimer: This repository is in a preview state. Expect to see some iterating as we work towards the final release candidate slated for early 2018. Feedback is welcome! ] -The **OpenAPI.NET** SDK contains a useful object model for OpenAPI documents in .NET along with common serializers to extract raw OAI JSON and YAML documents from the model. +The **OpenAPI.NET** SDK contains a useful object model for OpenAPI documents in .NET along with common serializers to extract raw OpenAPI JSON and YAML documents from the model. -**See more information on the Open API spec and its history here: Open API Initiative** +**See more information on the OpenAPI spec and its history here: Open API Initiative** Project Objectives -- Provide a single shared object model in .NET for Open API documents. -- Include the most primitive Reader for ingesting OAI JSON and YAML documents. -- Enable developers to create Readers that translate different data formats into Open API documents. +- Provide a single shared object model in .NET for OpenAPI descriptions. +- Include the most primitive Reader for ingesting OpenAPI JSON and YAML documents in both V2 and V3 formats. +- Provide OpenAPI description writers for both V2 and V3 specification formats. +- Enable developers to create Readers that translate different data formats into OpenAPI descriptions. # Readers -The OpenAPI.NET project holds the base object model for representing OAI documents as .NET objects. Translation for different data types into this object model is handled by reading raw JSON/YAML or from individual "Readers", a number of which are in the works. +The OpenAPI.NET project holds the base object model for representing OpenAPI descriptions as .NET objects. Translation for different data types into this object model is handled by reading raw JSON/YAML or from individual "Readers", a number of which are in the works. The base JSON and YAML Readers are built into this project. Below is the list of supported "reader" projects. - .NET Comment Reader: [Coming Soon] +# Example Usage + +Creating an OpenAPI Document + +```C# +var document = new OpenApiDocument +{ + Info = new OpenApiInfo + { + Version = "1.0.0", + Title = "Swagger Petstore (Simple)", + }, + Servers = new List + { + new OpenApiServer { Url = "http://petstore.swagger.io/api" } + }, + Paths = new OpenApiPaths + { + ["/pets"] = new OpenApiPathItem + { + Operations = new Dictionary + { + [OperationType.Get] = new OpenApiOperation + { + Description = "Returns all pets from the system that the user has access to", + Responses = new OpenApiResponses + { + ["200"] = new OpenApiResponse + { + Description = "OK" + } + } + } + } + } + } +}; +``` + +Reading and writing a OpenAPI description + +```C# +var httpClient = new HttpClient +{ + BaseAddress = new Uri("https://raw.githubusercontent.com/OAI/OpenAPI-Specification/") +}; + +var stream = await httpClient.GetStreamAsync("master/examples/v3.0/petstore.yaml"); + +// Read V3 as YAML +var openApiDocument = new OpenApiStreamReader().Read(stream, out var diagnostic); + +var outputStringWriter = new StringWriter(); +var writer = new OpenApiJsonWriter(outputStringWriter); + +// Write V2 as JSON +openApiDocument.SerializeAsV2(writer); + +outputStringWriter.Flush(); +var output = outputStringWriter.GetStringBuilder().ToString(); + +``` + # Build Status |**master**| @@ -39,3 +103,5 @@ provided by the bot. You will only need to do this once across all repos using o This project has adopted the [Microsoft Open Source Code of Conduct](https://opensource.microsoft.com/codeofconduct/). For more information see the [Code of Conduct FAQ](https://opensource.microsoft.com/codeofconduct/faq/) or contact [opencode@microsoft.com](mailto:opencode@microsoft.com) with any additional questions or comments. + +To provide feedback and ask questions you can use StackOverflow with the [OpenApi.net](https://stackoverflow.com/questions/tagged/openapi.net) tag or use the OpenApi.net Slack channel which you can join by registering for the httpapis team at http://slack.httpapis.com \ No newline at end of file diff --git a/build.cmd b/build.cmd index b741b8a90..d0d68b5d7 100644 --- a/build.cmd +++ b/build.cmd @@ -1,10 +1,24 @@ -SET VERSION=0.9.1 +@echo off +if "%~1"=="" goto :error + +SET %VERSION%=%~1 + +Echo Building Microsoft.OpenApi + SET PROJ=%~dp0src\Microsoft.OpenApi\Microsoft.OpenApi.csproj msbuild %PROJ% /t:restore /p:Configuration=Release msbuild %PROJ% /t:build /p:Configuration=Release msbuild %PROJ% /t:pack /p:Configuration=Release;PackageOutputPath=%~dp0artifacts;Version=%VERSION% +Echo Building Microsoft.OpenApi.Readers + SET PROJ=%~dp0src\Microsoft.OpenApi.Readers\Microsoft.OpenApi.Readers.csproj msbuild %PROJ% /t:restore /p:Configuration=Release msbuild %PROJ% /t:build /p:Configuration=Release -msbuild %PROJ% /t:pack /p:Configuration=Release;PackageOutputPath=%~dp0artifacts;Version=%VERSION% \ No newline at end of file +msbuild %PROJ% /t:pack /p:Configuration=Release;PackageOutputPath=%~dp0artifacts;Version=%VERSION% + +goto :end +:error +echo Version parameter missing e.g. build.cmd 1.0.0-beta0008 + +:end