microsoft/kiota

Kiota is a project to build an OpenAPI based code generator for creating SDKs for...

Kiota is a project to build an OpenAPI based code generator for creating SDKs for HTTP APIs

Kiota is a project to build an OpenAPI based code generator for creating SDKs for...

Project

. The goal is to produce a lightweight, low maintenance, code generator that is fast enough to run as part of the compile time tool-chain but scalable enough to handle the largest APIs. Kiota generates a lightweight set of strongly typed classes that layer over a set of core HTTP libraries and produce an intuitive and discoverable way of creating HTTP requests. A set of abstractions decouple the generated service library from the core libraries allowing a variety of core libraries to be supported.

This library builds on top of the Microsoft.OpenAPI.NET library to ensure comprehensive support for APIs that use OpenAPI descriptions. One of the goals of the project is to provide the best code generator support possible for OpenAPI and JSON Schema features. The conceptual documentation describes how kiota works and the high level concepts, this readme documents how to get started with Kiota.

Getting started

Generating SDKs

  1. Install required tools and dependencies. (refer to the Supported Languages table under the Required tools & dependencies column)
  2. Get Kiota using one of the available options.
  3. Generate your API client, checkout the Parameters reference for the different options.
  4. Start calling your API using your fluent API SDK.

Supported languages

The following table provides an overview of the languages supported by Kiota and the progress in the implementation of the different components.

Language Generation Abstractions Serialization Authentication HTTP Required tools & dependencies
CSharp JSON, TEXT Anonymous, Azure link
Go JSON, TEXT Anonymous, Azure link
Java JSON, TEXT Anonymous, Azure link
PHP JSON, TEXT Anonymous, ✔️ PHP League
Python JSON, ❌ TEXT Anonymous, Azure
Ruby JSON, ❌ TEXT Anonymous, ❌ Azure link
TypeScript/JavaScript JSON, TEXT Anonymous, Azure link
Shell ✔, ✔ JSON, TEXT Anonymous, Azure link
Swift ❌ JSON, ❌ TEXT Anonymous, ❌ Azure

Legend: ✔ -> in preview, ❌ -> not started, ▶ -> in progress.

Parameters reference

Parameters are documented here.

Debugging

Make sure you install the pre-requisites first. If you are using Visual Studio Code as your IDE, the launch.json file already contains the configuration to run Kiota. By default this configuration will use the openApiDocs/v1.0/Mail.yml under the PowerShell repository as the OpenAPI to generate an SDK for. By default this configuration will output the generated files in a graphdotnetv4|graphjavav4|graphtypescriptv4 folder located in the parent folder this repository is cloned in.

Selecting the language you want to generate an SDK for in the Visual Studio Debug tab and hitting F5 will automatically build, start, and attach the debugging process to Kiota.

Samples

You can find samples of clients generated with Kiota in the Kiota samples repository.

Contributing

This project welcomes contributions and suggestions. Most contributions require you to agree to a Contributor License Agreement (CLA) declaring that you have the right to, and actually do, grant us the rights to use your contribution. For details, visit https://cla.opensource.microsoft.com.

When you submit a pull request, a CLA bot will automatically determine whether you need to provide a CLA and decorate the PR appropriately (e.g., status check, comment). Simply follow the instructions provided by the bot. You will only need to do this once across all repos using our CLA.

This project has adopted the Microsoft Open Source Code of Conduct. For more information see the Code of Conduct FAQ or contact [email protected] with any additional questions or comments.

Trademarks

This project may contain trademarks or logos for projects, products, or services. Authorized use of Microsoft trademarks or logos is subject to and must follow Microsoft's Trademark & Brand Guidelines. Use of Microsoft trademarks or logos in modified versions of this project must not cause confusion or imply Microsoft sponsorship. Any use of third-party trademarks or logos are subject to those third-party's policies.

Issues

Quick list of the latest Issues we found

PureKrome

PureKrome

bug
Icon For Comments3

👋🏻 G'Day! Me again :)

While working on #135 I thought I might also test out some more real world OpenApi's, to get some more data on the effectiveness of Kiota.

Kiota: Tested against version 0.51.

Twitter OpenApi

  • Endpoint/API: https://api.twitter.com/2/openapi.json
  • Command: .\kiota.exe --openapi https://api.twitter.com/2/openapi.json --additional-data false --language csharp -o TwitterClient -c TwitterApiClient --log-level information --clean-output true
  • ✅ Completes and generates an SDK
  • ❌ Doesn't compile with a number of errors like:
  • REF: https://github.com/twitterdev

image

GitHub OpenApi

image

image

My rational for testing these two endpoints is because they are very public and well known. Sure, the PetStore is the go-to 'demo', but people might think it's not really 'real-world' and therefore not to be taken really seriously. While if this does work against real world endpoints, if can definitely give it some street-cred! In my opinion ...

baywet

baywet

Ruby
Icon For Comments0

follow up of #1411 implemented via #1603 in dotnet/go/java. implementation work of the factory, serialization and deserialization methods for those types. (wrapper classes vs static functions).

baywet

baywet

Swift
Icon For Comments0

follow up of #1411 implemented via #1603 in dotnet/go/java. implementation work of the factory, serialization and deserialization methods for those types. (wrapper classes vs static functions).

baywet

baywet

PHP
Icon For Comments0

follow up of #1411 implemented via #1603 in dotnet/go/java. implementation work of the factory, serialization and deserialization methods for those types. (wrapper classes vs static functions).

baywet

baywet

Python
Icon For Comments0

follow up of #1411 implemented via #1603 in dotnet/go/java. implementation work of the factory, serialization and deserialization methods for those types. (wrapper classes vs static functions).

baywet

baywet

TypeScript
Icon For Comments0

follow up of #1411 implemented via #1603 in dotnet/go/java. Effectively TypeScript is the only language that properly support union and intersection types. And we might want to implement the feature a different way that with wrapper classes. Opening this issue so we can discuss implementation details of the factory, serialization and deserialization methods for those types. (wrapper classes vs static functions).

andrueastman

andrueastman

enhancement
Icon For Comments0

Nothing may need to be done but we need to verify this is the behavior.

  • Different languages may result to different formats when dateTime values are placed in the path parameters. Ideally we should default to the ISO 8601 standard.
  • Furthermore we also need to add an error in the event the URI from RequestInformation is accessed and there is not baseUrl path parameter as done here.

Reference

baywet

baywet

enhancement
Icon For Comments0

details to be found in #1179 and corresponding PR. Continuation of #1643

Because Ruby doesn't have an azure identity library, we won't be able to fully support CAE from the get go. However we can do the infrastructure work to prepare its support which includes:

  • getting the value from the www-authenticate response header in the http request adapter and retrying the request (once)
  • using the value in the access token provider to request a new token
  • set the cp1 capability when requesting tokens
baywet

baywet

bug
Icon For Comments0

more information in #1535

Some APIs might index collections by different ids, historically this can be an issue as we end up generating multiple method in the same class with the same name. We should make sure we de-duplicate the methods when needed.

Should result in a GetByRef and a GetByCommitSha method which don't conflict with one another.

baywet

baywet

bug
Icon For Comments0

more details at #1445

Some query parameter names are escaped in the generated code because the are invalid symbol names in the target language (e.g. $select).

While this solves any compilation issues, it breaks the URL templating mechanism for escaped names (because the expected parameter name by the template engine will be %24select. The ruby generation needs a way to carry that information so the template parameter matches the property name.

In other languages we've used annotations/attribute where the property is augmented by a custom attribute with the right property name the engine expects, and the add parameters method reads in that attribute if present instead of taking the property name.

Related to #1651

nikithauc

nikithauc

enhancement
Icon For Comments5

#1013 identified the requirement to generate model as interfaces which is a convention for JavaScript/TypeScript community. The solution that is introduced to this is

  • Create model interfaces from model classes
  • Maintain classes with an Impl suffix.
  • Suggest the use of interfaces to deal with model objects and abstract the model class implementation.

However, there is also a part of the community which uses classes for models. For instance, Angular and NestJS recommend the use of classes instead of interfaces for models (although many angular users do prefer model interfaces).

Expectation of this issue:

  • Have a better naming for classes and interfaces. Something better than -Impl. Kiota generation should ease the breaking changes when we need to add/modify models support updates in the future.

  • The Kiota generation should take into consider that the TS some user might use interfaces AND/OR classes for models and pass allow generation commands to users the options the type of models that they want.
    This can be more of an incremental effort allowing more community friendly generation commands to be added in the future.

baywet

baywet

enhancement
Icon For Comments0

more details at #1461

The factories registries for parse node and serialization need to to be updated to perform a staggered lookup.

  1. The headers can technically contain multiple content mime types separated by ;, so we need to split and trim first.
  2. The mime type can be vendor specific application/vendor.product+json, we should try an exact match and return it if we find a factory.
  3. If we don't, we should remove the vendor part vendor.product and lookup the registry with a non-vendor specific entry, return the factory we find if any.
  4. If we haven't found anything, throw an error (like we do today)
baywet

baywet

enhancement
Icon For Comments0

related to #134 and associated pull request.

The http request adapter implementation needs to handle binary requests (photo upload) and binary responses (file download). This may require additional methods to be defined in the request adapter interface and the executor generator method to be updated.

baywet

baywet

enhancement
Icon For Comments0

related #411

To provide a better experience to SDK users, ruby

  • models generation needs to be updated to generate error types that derive from standard error types
  • request executor method generator needs to be updated to pass the error type mapping to the request adapter
  • request adapter interface needs to be updated to accept the mapping
  • request adapter implementation needs to be updated to deserialize to those error type on error status code [400, 600[
baywet

baywet

enhancement
Icon For Comments0

details located in #648 and associated PR.

To deserialize to the right type we need to:

  • implement generating the discriminator static method for models (reads a property in the payload and instantiates the right type)
  • pass a reference to that method to the request adapter in the request executor method.
  • forward the reference to that method to the parse node in the request adapter
  • update the corresponding parse node, request adapter interfaces

Note: this is also impacted by ongoing work in #1411

baywet

baywet

bug
Icon For Comments0

depends on #1650

Due to conflicting standard requirement between RFC 6370 (uri template) and OData, we've had to encode query parameter names (%24select instead of $select) which means the service won't understand them.

To fix for that, once we have a middleware pipeline for the http client, we should implement a handler to decode the query parameter names.

See the example

baywet

baywet

enhancement
Icon For Comments2

related #120 related #635

To implement cross cutting concerns (like retrying on transient errors) we need the current http client to support middleware handlers, that is intercepting and change the request before it's sent over the wire, and the response before it's returned to the caller.

The first step here is to check the documentation of the client we're currently using to see whether it supports two things:

  • Defining and injecting middleware handlers in the requests execution pipeline
  • Defining and attaching request options to the request object (to be picked up by a middleware handler)

If it doesn't, we should design an overhead API for the native client that offers similar methods prototypes (what we did with TypeScript & fetch).

Additionally:

  • the abstractions needs to have a middleware request option interface defined
  • we need a client factory in the http library so consumers can get a client with the same middleware configuration as the request adapter is using by default.
  • the request information type needs to be able to carry request options
  • the options property property on request configuration needs to be of this new type (update the refiner)
  • generator method needs to pass the options to the request information object
  • the request adapter implementation needs to pass these options to the native request object
Versions

Quick list of the latest released versions

v0.5.1 - Sep 09, 2022

Changed

  • Fixed a regression where parse node parameter type for factories would be incorrect in Go, Ruby, Swift, Java and TypeScript.

Added

  • Exempts read only properties from being serialized and sent to the service. #1828

v0.5.0 - Sep 08, 2022

Changed

  • Fixed a bug where Go clients would panic in case of nil response value.
  • Fixed a bug to properly add request headers to Nethttp requests in Ruby.
  • Fixed a bug to properly reject invalid URLs in Ruby.
  • Fixed an issue with require statements being generated instead of require relative in Ruby.
  • Updated AdditionDataHolder with the correct namespace. (Ruby)
  • Removed/fixed passing in the current instance to fields deserializers in Ruby. #1663
  • Fix issue with duplicate variable declaration in command handlers (Shell)
  • Update namespace qualification algorithm (helps in resolving when a type name appears in multiple namespaces) to use case insensitive string comparison (CSharp).
  • Fix an issue where namespace reserved name replacement would not include replacing import names in the declared areas in CSharp. #1799
  • Removed Python abstractions, http, authentication and serialization packages
  • Fixed an issue with generating the incorrect serialized type name and require statement for get/post methods (Ruby).
  • Remove all overloads for GO request executors
  • Adds a context object in all GO requests
  • Remove all overloads for GO request executors and Adds a context object in all GO requests GO#176
  • Fixed a bug where the Hashing method for type names differentiation could lock the process.
  • Fixed a bug where CSharp declaration writer would add usings for inner classes.
  • Fixed a bug with inline schema class naming.
  • Fixed a bug where symbols starting with a number would be invalid.
  • Fixed a bug where classes could end up with duplicated methods.
  • Fixed a bug where Go writer would try to import multiple times the same symbol.
  • Fixed a bug where the core generator engine would fail to recognize meaningful schemas.
  • Fixed a bug where Go and Java inner class imports would be missing.
  • Fixed a bug where Go and Java collection bodies would not generate properly.
  • Aligns request options types in Java with other collections type.
  • Fixed a bug where Java would skip duplicated imports instead of deduplicating them.
  • Fixed a bug where Java would not convert date types for query parameters.
  • Fixed a bug where Java doc comments could contain invalid characters.
  • Fixed a bug where function parameters would be reodered incorrectly in dotnet#1822

Added

  • Added support for range (2XX) responses. #1699
  • Added none output formatter to CLI commons. (Shell)
  • Added 'Accept' field of http request header in Ruby. #1660
  • Added support for text serialization in Python. #1406
  • Added support for composed types (union, intersection) in CSharp, Java and Go. #1411
  • Added support for implicit discriminator mapping.
  • Added support for default values of enum properties in CSharp, Java and Go.

v0.4.0 - Aug 18, 2022

Changed

  • Fixed a bug where collections types would generate invalid return types in CSharp.
  • Fixed a bug where a nullable entry in anyOf schemas would create unnecessary composed types.
  • Removed duplicate properties defined in base types from model serialization and deserialization methods and initialise property defaults in constructor. #1737
  • Fixed a bug where the generated code had incorrect casing within a method (Ruby). #1672
  • Fixed an issue where duplicate 'require' statements are generated for inner classes in the middle of the file (Ruby). #1649
  • Split parsable interface and additional property/data interface in Ruby. #1654
  • Changed format of datetimes in Go to be converted to ISO 8601 by default when place in path parameters(Go)
  • Reduce code verbosity on Go Getters and Setters. [G0#26][https://github.com/microsoftgraph/msgraph-sdk-go-core/issues/26]

Added

  • Updated test suite and tooling for python abstractions and core packages. #1761
  • Added support for no-content responses in python abstractions and http packages. #1630
  • Added support for vendor-specific content types in python. #1631
  • Simplified field deserializers for json in Python. #1632
  • Adds python code generation support. #1200
  • Added native type support for Duration, Time Only, and Date Only in Ruby. #1644
  • Added a --additional-data argument to generate the AdditionalData properties #1772

v0.3.0 - Jul 08, 2022

Changed

  • Fixed a bug where query parameter types would not consider the format. #1721
  • Fixed a bug where discriminator mappings across namespaces could create circular dependencies in Go. #1712
  • Fixed a bug where Go binary downloads would try to parse a structured object.
  • Aligned mime types model generation behaviour for request bodies on response content. #134
  • Fixed an issue where some critical errors would not return a failed exit code. #1605
  • Moved nested request configuration classes into separate files within the namespace for PHP. #1620
  • Fixed an issue where duplicate 'require' statements are generated for inner classes in the middle of the file (Ruby). #1649
  • Fixed wrong parameter type for Request config for request executors(PHP). #1629
  • Increased indentation for errorMappings in the request executor (PHP). #1629
  • Fixed bugs in PHP discriminator factory methods, Guzzle request adapter send methods, stream and plain text response handling. #1634
  • Removed abstractions, authentication, http and serialization packages for PHP. #1637
  • Fixed a bug where generated discriminator methods would reference types in other namespaces without proper resolution. #1670
  • Fixed a bug where additional data and backing store properties would be duplicated. #1671
  • Fixed a bug where serialized properties would not match the json property name when using the backing store. (CSharp).
  • Corrected PHPDoc types for headers and request options properties in request configuration classes. #1711
  • Fixed a bug where properties defined at multiple inherited models would collide. #1717

Added

  • Added a more explicit error message for invalid schemas. #1718
  • Added a parameter to specify why mime types to evaluate for models. #134
  • Added an explicit error message for external references in the schema. #1580
  • Added accept header for all schematized requests. #1607
  • Added support for paging. #1569
  • Added support for vendor specific content types(PHP) #1464
  • Added support for accept request header (PHP) #1616
  • Added Getting Started steps for PHP. #1642

v0.2.1 - May 30, 2022

Changed

  • Fixed a bug where the logger would not log all the information. #1588

Added

  • Added missing mappings in PHP for uint8 and int8. #1473
  • Added support for enum and enum collections responses in Go. #1578
  • Added Kiota builder engine as a package for external services integration. #1582

v0.2.0 - May 24, 2022

Changed

  • Fixed a bug where union types would not work as error types.
  • Fixed a bug where generation names could collide with platform names in CSharp.
  • Fixed missing numbers mapping cases.
  • Fixed multiple bugs enum options invalid symbols generation.
  • Fixed a bug where symbols (classes, enums, properties...) could be only numbers, which is unsupported by most languages.
  • Fixed a bug where union types would be missing serialization information.
  • Fixed a bug where inline request bodies could override each other for the same path item with multiple operations.
  • Fixed simple collections (arrays) support in CSharp.
  • Fixed a bug where code properties could not be union or exclusion types.
  • Fixed a bug where models would fail to generate if the schema type wasn't set to object.
  • Fixed a bug where nullable wrapper schema flattening would ignore some composed type options.
  • Fixed a bug where arrays without items definition would derail generation.
  • Fixed a bug with enums detection for generation. (interpreted as string)
  • Fixed a bug where classes names cleanup could end-up in a collision.
  • Fixed a bug where null reference exception would be thrown when trying to lookup type inheritance on discriminators
  • Fixed the lookup of model namespaces to only look in the target namespace to avoid reference collisions.
  • Fixed a bug for the generated send method for paths returning Enums in dotnet.
  • Breaking: renamed the --loglevel parameter to --log-level.
  • Fixed a bug where some path parameter objects would have empty key values #1586

Added

  • Added support for enum options descriptions (C#/Go/Java/TypeScript). #90
  • Added support for file parameters types. #221
  • Added support for no content responses in PHP. #1458
  • Added support for error handling in php request adapter. #1157
  • Added support for discriminator downcast in PHP. #1255
  • Added support for multiple collections indexing under the same parent.
  • Added code exclusions placeholder in the generation. (oneOf)
  • Added support for continuous access evaluation in Java. #1179
  • Added support for special characters in URL query parameter names. #1584

v0.1.3 - May 06, 2022

Added

  • Added text serialization library for PHP. #1546.

Changed

  • Fixed the image name in CI for MCR.

Changed

v0.1.2 - May 06, 2022

Changed

  • Minor changes in the parameters (-co => --co, -ll => --ll, -d is required, -l is required).

v0.1.1 - May 06, 2022

Changed

  • Add binder for nullable boolean options. (Shell)

v0.1.0 - May 05, 2022

v0.0.23 - Apr 19, 2022

Changed

  • Fixed a bug where line returns in descriptions could break the generated code. #1504
  • Fixed a bug with special characters in query parameters names. #1445
  • Fixed a bug where complex types path parameters would fail to generate.
  • Fixed a bug where Go serialization/deserialization method would generate invalid accessor names.

v0.0.22 - Apr 08, 2022

Changed

  • Simplified field deserialization.(PHP) #1493
  • Fixed a bug where the generator would not strip the common namespace component id for models. #1483
  • Simplified field deserialization. #1490

Added

  • Added generation of command options for headers defined in the OpenAPI metadata source file. (Shell)
  • Added retry, redirect, chaos and telemetry handler in java.

v0.0.21 - Apr 01, 2022

Changed

  • Moved go libraries to their own repository. #370
  • Fixed a bug where the base url of the request adapter would be reset by the client(PHP). #1469
  • Fixed issue where custom date types are never corrected for method parameters(PHP). #1474
  • Replaced DateTimeOffset with DateTime for custom date types(PHP). #1474
  • Fixed a bug where the base url of the request adapter would be reset by the client. #1443
  • Fixed a bug where request builder classes for collections endpoints would have a wrong name. #1052
  • Fixed issue with ambiguous type names causing build errors and stack overflows. (Shell) #1052
  • Fixed a bug where symbols (properties, methods, classes) could contain invalid characters #1436
  • Renamed parameters for requests: o => options, q => queryParameters, h => headers. #1380
  • Fixed a bug where names would clash with reserved type #1437
  • Fixed unnecessary use of fully qualified type names in Dotnet.

Added

  • Added text output formatter to CLI commons. (Shell)
  • Added support for vendor specific content types generation/serialization. #1197
  • Added support for 204 no content in generation and CSharp/Java/Go/TypeScript request adapters. #1410
  • Added a draft swift generation implementation. #1444
  • Added support for yaml response type generation. #302
  • Added support for xml response type generation. #302
  • Added support for unstructured response generation (stream). #546

v0.0.20 - Mar 25, 2022

Changed

  • Moved TypeScript middleware from Graph core to kiota http.
  • Fixed a bug where errors would fail to deserialize for TypeScript.
  • Fixed a bug where decimal types would not be mapped in TypeScript.
  • Fixed circular dependencies issues for TypeScript #870.
  • Fixed a bug where JSON serialization would fail on nil properties in Go.
  • Moved typescript core packages into Kiota-TypeScript repo and delete for Kiota repo.
  • Fixed a bug where collections of complex types could be mis-represented. #1438
  • Fixed a bug where inline properties would not generate their own type definition. #1438

v0.0.19 - Mar 18, 2022

Changed

  • Fixed a bug where models descriptions would not be deterministic #1393
  • Fixed a bug where unnecessary namespaces would be added to models generation #1273
  • Fixed a bug where Go byte arrays would not write deserializers properly.
  • Fixed a bug where integers would not be recognized when type is not number.
  • Fixed a bug where union types with primitive member types would fail to generate #1270
  • Fixed a bug where union types with inline schema member types would fail to generate #1270
  • Fixed a bug where referenced types with no titles would fail to generate #1271
  • Fixed a bug where the generator would introduce unnecessary union types for nullables. #990
  • Moved all the dotnet libraries to their own repository. #1409

Added

  • Adds a --clean-output argument to clean the target directory before generation #1357
  • Adds support for text/plain responses for CSharp, Java, TypeScript and Go. #878

v0.0.18 - Mar 14, 2022

Changed

  • Add missing method getBinaryContent to the ParseNode interface(PHP).
  • Split the Parsable interface into AdditionalData interface and Parsable interface(PHP) #1324.
  • Shell commands will now default to writing indented JSON. This option can be disabled through the CLI option --json-no-indent (Shell) #1326
  • Update System.CommandLine version (Shell) #1338
  • Add async writers in output formatters (Shell) #1326
  • Add async filter function in output filters (Shell) #1326
  • BREAKING: Remove synchronous version of WriteOutput that accepts a stream input (Shell) #1326
  • BREAKING: Remove synchronous version of WriteOutput that accepts a string input (Shell) #1326
  • BREAKING: Remove synchronous version of FilterOutput that accepts a string input (Shell) #1326
  • Fixed a bug where error responses without schema would make generation fail #1272
  • Fixed indeterministic parameters ordering #1358
  • Fixed indeterministic error mappings ordering #1358
  • Fixed indeterministic discriminator mapping ordering #1358
  • Fixed race condition when removing child items leading to erratic code generation results #1358
  • Replaced models namespaces flattening by circular properties trimming in Go #1358
  • Fixed a bug where inherited interfaces would be missing imports in Go #1358
  • Fixed a bug where inherited interfaces would be missing imports for the parent #1358
  • Fixed bugs across request adapter and serialization in PHP #1353
  • Fixed NullReferenceException in Go generator
  • Fixed incorrect mapping when the response type is text/plain #1356
  • Fixed a bug in Dotnet.Typescript where properties could have invalid characters #1354
  • Improved error display #1269
  • Fixed a bug where union wrapper models would lack the discriminator methods.
  • Fixed bug working with async azure credentials in Python.
  • Fixed minor issues around PHP Generation, Serialization and Abstractions.
  • Fix Discriminator support for PHP.
  • Move additional data from Parsable into AdditionalDataHolder base class in Python #1360

Added

  • Added default implementations for table and JSON output in CLI commons (Shell) #1326
  • Adds missing mapped types (int8, uint8, commonmark, html, ...) #1287

v0.0.17 - Mar 03, 2022

Changed

  • Fixed a bug in Go generator where temporary url template parameters would not be used preventing the use of raw urls.
  • Fixed a bug where the Go http client configuration would impact non-kiota requests.
  • Fixed bug where installing python abstractions failed due to missing dependencies #1289
  • Modified python test matrix to include python 3.10 #1289
  • Added return statement to AnonymousAuthenticationProvider in python abstractions #1289
  • Fixed bug in enabling backing store for parse node factory by passing ParseNodeFactoryRegistry to method call #1289
  • Fixed errors in python serialization due to to responses as json instead of json strings #1290
  • Added python version 3.10 to testing matrix #1290
  • Fixed bug with inconsistent Java namespace and directory name casing #1267
  • Fixed typeOf string check in JsonParseNode Typescript.
  • Fixed shell stream output getting processed by output formatters when no file path is provided #1291

Added

  • Adds support for downcast of types during deserialization according to the discriminator information in the description (CSharp/Go/Java/TypeScript). #646
  • Adds support for generating interfaces for models in Go. #646
  • Adds support for generating functions (as opposed to methods or static methods) in the generator (used in TypeScript for discriminator factories). #646
  • Added support for global error handling in python abstractions #1289
  • Added a HTTPRequestAdapter for python Requests library #1251
  • Added Shell output filter (JMESPath) support #1291

v0.0.16 - Feb 23, 2022

Changed

  • Fixed a bug where request body would get dropped by the compression handler in Go
  • Fixed an issue where multiple api clients could run into racing conditions in Go.
  • Fixed a bug where empty additional data in Go would lead to invalid JSON payloads during serialization.
  • Fixed a bug where Go serialization would write empty arrays for nil values.
  • Modified the TypeScript RequestInformation URL paramater data type from URL to string.
  • Modified TypeScript packages to provide CJS and ESM modules.
  • Modified the TypeScript RequestInformation query and path paramaters data type from Map to Record Type.
  • Modified TypeScript RequestInformation headers and options to Record type.
  • Modified the TypeScript RequestInformation content data type to ArrayBuffer.
  • Updated PHP abstractions to make property keys and values nullable in SerializationWriter.php.
  • Fixed an issue where enum collections parsing would fail in Go.
  • Breaking. Kiota clients generate error types and throw when the target API returns a failed response (dotnet, go, java, typescript). #1100
  • Fixed missing methods for serializing/deserializing decimal values in dotnet #1252
  • Modified RequestBuilder types are suffixed with the ItemRequestBuilder if they belong to an item namespace to fix name collisions #1252
  • Modified the use of fully qualified name of types in dotnet to ensure the target type and current element are not in the same namespace #1252.

Added

  • Added the ability to configure the underlying transport in Go. #1003
  • Added additional date time (date, time, duration) types in the generation process. #1017
  • PHP Request Adapter (includes middleware) #1048, #918, #1024, #1025
  • Added support for PHP Json Serialization.
  • Adds Python abstractions library. #925
  • Adds hostname and protocol validation in authentication. #1051
  • Adds Azure Identity Authentication Provider for Python. #1108
  • Adds JSON Serialization library for Python. #1186
  • Adds PHP League Authentication Provider for PHP #1201
  • Added Shell language support #738

v0.0.15 - Dec 17, 2021

Changed

  • Fixes name collisions in dotnet by renaming "HttpMethod" enum to "Method" in dotnet abstractions
  • Add support for PHP Generation.
  • Migrated generator to dotnet 6 #815
  • Fixes a bug where json deserialization would fail in go
  • Fixes a bug where query parameters would not be added to the request in go
  • Fixes a bug where at signs in path would derail generation
  • Fixes Go doc comments in packages and generation
  • Fixes a bug where RequestInformation did not accept some content headers in dotnet
  • Added support for providing cancellation token in dotnet #874, #875, #876
  • Upgrades go libraries to go17.
  • Fixes a bug in Go where reserved keywords for properties would be wrongly replaced.
  • Fixes a bug in Go where setters would be missing nil checks.
  • Fixes a bug where OData select query parameter would not be normalized
  • Fixes a bug in Go where empty collections would not be serialized.
  • Fixes a bug where generation would fail because of empty usings.
  • Fixes a bug where Java and Go escaped model properties would not serialize properly.

v0.0.14 - Nov 08, 2021

Added

  • Added support for changing the base url #795

Changed

  • Fixes a bug where arrays of enums could be wrongly mapped.
  • Fixes a bug where go deserialization would fail on collections of scalars.
  • Fixes a bug where TypeScript query parameters would be added to headers instead #812

v0.0.13 - Nov 01, 2021

Changed

  • Technical release to bump version number of go packages after replace removal

v0.0.12 - Nov 01, 2021

Added

  • Adds Go authentication, http and serialization libraries and finalizes the generation #716

v0.0.11 - Oct 27, 2021

Changed

  • Switched to URL templates instead of string contract for URL building #683
  • Fixed a bug where CSharp method names would not follow naming conventions #730

v0.0.10 - Oct 06, 2021

Changed

  • Renames middlewareoption into requestoption to stay agnostic from implementation #635
  • Aligned http packages on naming convention #444

v0.0.9 - Oct 04, 2021

Added

  • Adds support for path parameters #573
  • Adds missing type mappings in TypeScript #573
  • Adds a missing http core method for collections of primitives #573
  • Aliases imports with the same name in typescript #573

Changed

  • Fixes a bug where empty title would make generation fail #558
  • Fixes a bug where float, long and binary types would not be parsed by the generator #558
  • Fixes a bug where generation would fail on compact namespace names #558
  • Renames request info into request information to avoid conflicts with platform #559
  • Fixes a bug where the server url would not be taken in consideration #626
  • Fixes a bug where missing namespaces would make the generation fail #573
  • Fixes a bug where class names could contain special characters #573
  • Fixes a bug where namespace names could contain path parameters #573
  • Fixes a bug where namespace names could contain special characters #573
  • Multiple performance improvements #573
  • Fixes a bug where path generation would deduplicate segments leading to the wrong path #573
  • Fixes a bug where the CodeDOM would be corrupted (bad tree) leading to incoherent generation results #573
  • Fixes a bug where the generator would duplicate some models #573
  • Moves the models to a dedicated namespace (models) #573
  • Fixes a bug where enum serialization would be calling the wrong method in TypeScript #573
  • Fixes a bug where request body would use the response schema #573
  • Fixes an issue where type could conflict with namespace names and prevent CSharp compilation #573
  • Fixes an issue where primitive types would map to the wrong serialization method in dotnet #573
  • Fixes an issue where union models would not be able to deserialize because of missing members #573
  • Fixes an issue where request builder methods would refer to unexisting properties in dotnet #573
  • Fixes an issue where duplicated symbols for different imports would make java compilation fail #573
  • Adds missing type mappings in java #573
  • Fixes an issue where Go generation could use reserved keywords #573
  • Fixes a bug where Go generation could end up with circular dependencies in models #573
  • Fixes a bug where Go generation would map the wrong http core method for primitive types #573
  • Fixes a bug where Go generation would have unused imports making build fail #573
  • Fixes a bug where missing type definitions would make Ruby generation fail #573
  • Fixes a bug where Go generation would miss the module symbol for inherited constructors #573

v0.0.8 - Aug 25, 2021

Added

  • Ruby JSON serialization #429
  • Ruby HTTP service #472
  • Go generation support & abstractions #413

Changed

  • Fixed a bug where raw collections requests would not be supported #467
  • Fixes a bug where in memory backing store would not return changed properties to null #243
  • Fixes a bug where generated models would be tied to a specific backing store implementation #400
  • Fixed #428 a bug where inline double defintion would make code dom generation fail
  • Revamped authentication provider interface to allow multiple authentication schemes #498
  • Fixed a bug preventing from using request builders with raw URls #508

v0.0.7 - Aug 04, 2021

Added

  • Ruby generation implemented #244
  • Adds middleware support for http clients #330

v0.0.6 - Jul 26, 2021

Added

  • Initial ruby abstractions #212
  • Backing store support #223
  • Doc comments for abstractions libraries #324

Changed

  • Better client configuration #268
  • Request builders constructors for data validation #322

v0.0.5 - Jun 10, 2021

Changed

  • Expands code coverage to 88% #147
  • Removes json assumption for request body to support multiple formats #170
  • Escapes language reserved keywords #184
  • Replaces custom URL tree node by class provided by OpenAPI.net #179
  • Splits the core libraries in 3 separate libraries #197
  • Changes default namespace and class name to api client #199
  • Aligns Parsable interfaces across languages #204
  • Fixes a bug where classes with properties of identical name would make build fail in CSharp #222

Added

  • Adds kiota packaging as a dotnet tool #169
  • Adds input parameters validation #168
  • Adds support for collections as root responses #191

v0.0.4 - Apr 30, 2021

Changed

  • Multiple performance improvements for large descriptions
  • Deterministic ordering of properties/methods/indexers/subclasses
  • Deterministic import of sub path request builders
  • Stopped generating phantom indexer methods for TypeScript and Java
  • Fixed a bug where prefixed properties would be missing their prefix for serialization

Library Stats (Sep 15, 2022)

Subscribers: 23
Stars: 220
Forks: 36
Issues: 86
CLI

593

A simple command-line HTTP server

NET 5+ and run this command:

A simple command-line HTTP server
HTTP

912

Easyhttp is a fast HTTP client for C#

This project is active and maintained by an ever growing developer community

Easyhttp is a fast HTTP client for C#
API

140

This is the core behind AniAPI HTTP Rest APIs

Anilist as the principal Anime's reference and scrapes implemented websites to obtain episodes

This is the core behind AniAPI HTTP Rest APIs

Embedded HTTP and WebSocket Server for UWP/

The IotWeb class library allows you to embed a simple HTTP and WebSocket server into your C# application

Embedded HTTP and WebSocket Server for UWP/
HTTP

296

Fusillade: An opinionated HTTP library for Mobile Development

as well as Responding to questions on StackOverflow

Fusillade: An opinionated HTTP library for Mobile Development

Kiota Azure Identity authentication provider library for dotnet

The is the authentication provider implementation with Kiota generated project will need a reference to a authentication provider library to authenticate HTTP requests to an...

Kiota Azure Identity authentication provider library for dotnet

An implementation of HTTP Caching in

NET MVC Core and shortcomings of previous approach while the client-side mostly remained the same

An implementation of HTTP Caching in

OpenFaaS C# HTTP Template

This is no longer being maintained as the OpenFaaS community has decided to prefer

OpenFaaS C# HTTP Template

OpenFaaS C# HTTP Template

This repository contains the template for OpenFaaS using the upgraded of-watchdog which allows for higher throughput

OpenFaaS C# HTTP Template

Fluently Http Client

NET Standard with fluent APIs which are intuitive, easy to use and also highly extensible

Fluently Http Client

Http is a small

Install this NuGet package in your Visual Studio project

Http is a small