Native .NET C# client library for accessing the Symphony Agent's REST-like API.
To implement a shared client library, published on the NuGet gallery, that will ease .NET development against the Symphony Agent API by handling the certificate-based authentication and management of tokens using best practices, and by providing native methods and data types to access the Agent's REST-like API as defined by its Swagger spec files.
The Agent API is a REST-like API, served by an Agent API process, allowing for the programmatic sending and receiving of messages in a Symphony pod. Authentication is certificate-based and performed against the pod and the key manager. After authenticating, session and key manager tokens are used when invoking API methods via the Agent. Certain API functions can be invoked directly on the pod, bypassing the Agent, but when doing so the key manager token should not be included in the request. The Agent itself contains functionality to remove the key manager token when invoking pod API functions.
The library will be built as a shared library enabling .NET applications to interact natively with the API. It will handle the process of authentication and token management, and provide native .NET methods and data types in front of the REST-like API. Whenever possible, native code will be generated directly from the published Swagger definitions. The library should be compatible with .NET Core.
The library will aim to support new versions of the Agent API as they are released while maintaining backwards-compatibility with older versions, according to the versioning method used by Symphony (sprints). Provided there is backend support for it, it will also have some method of enumerating the functionality available, so that a consumer of the library can act according to what version of the Agent API it is connecting to.
Several Symphony API consumers are in the process of developing client applications on the .NET platform. Symphony are developing "hello world" type examples in different languages, including C#. A client library relieves API consumers from the need to manage authentication, implement service requests, and write other boilerplate code, and get up and running with the Symphony Agent API quicker. By also publishing the library to the NuGet gallery, developing .NET applications against an evolving API will be even easier.
Owner: Johan Forsell
Committers: Johan Sandersson, Malay Shah, Joao Figueiras (FactSet)
Library name consistent with conventions used by Symphony and other .NET libraries
Decide on how to generate .NET code from Symphony's Swagger definitions