

Last date modified: April 15 2025
The Relativity Kepler framework provides you with the ability to build custom REST EndPoints via a .NET interface. You build a Kepler service using standard .NET contracts, which the Kepler framework uses to build HTTP endpoints. Your Kepler service is then deployed in Relativity as part of a custom application built on the Application Deployment System (ADS). Additionally, the Kepler framework includes a client proxy that you can use when interacting with the services through .NET.
Kepler services offer these advantages:
Use the information in this section to become familiar with the basic concepts and implementation workflow for a Kepler service. The outline of this workflow includes both the server-side implementation of a service, and the client-side interactions with it. See the following sections:
For code samples, see Kepler service structure and components.
The implementation of a Kepler service includes defining the service contract, implementing the required functionality, and organizing the service by module. The following sections provide a high-level description of each step in this workflow:
A service module is a simple unit of code used to organize your services within the Kepler framework. All Kepler services belong to a single Kepler module. For more information, see Kepler service structure and components.
Use the following design guidelines when implementing the module for your service:
Note: The RoutePrefix attribute has certain naming limitations. Don't use the word Relativity in the string for this attribute. For example, Relativity.MyManager and MyRelativityService are reserved for Relativity use only.
Note: In general, an ADS application has a single root module, but you may need to divide your services into two or more modules as your application grows.
A contract defines the programming interface for your service. This interface is exposed through .NET and it determines the functionality that your service provides.
Implement your contract as a simple .NET interface. Use the following design guidelines when implementing the interface for your service:
For example, possible settings for the audience or consumer include:
After you define your contract, implement the functionality exposed through your interface. Add your implementation class to its own Visual Studio project and DLL. Follow this best practice because the implementation class runs on the server and shouldn't be visible to other users of your service.
You can interact with a Kepler service by making calls through a .NET client or by submitting HTTP calls similar to those used for other RESTful services. The following sections outline how to make calls to your service:
You can access your Kepler service from any .NET language using the client library provided as part of the Kepler framework. For client code samples, see the documentation for existing services listed on RelativityOne APIs.
The following steps provide a high-level overview describing how to configure a .NET proxy used to call the server:
You can make calls to a Kepler service using any standard REST or HTTP client, because all Kepler APIs are exposed over the HTTP protocol. By default, Kepler service calls use the POST method, but other HTTP methods are available. For more information, see HTTP headers, verbs, and related information.
Complete these steps to a call to an endpoint:
Note: Don't leave this header value blank. Some browsers remove empty headers.
The Kepler framework returns a 404 status code when the X-CSRF-header isn't submitted. If unexpected 404 status code is returned, make sure that you have included the proper header.
1
<host>/Relativity.REST/api/{ModuleName}/{InterfaceName}/{MethodName}
This basic URL template includes the following tokens for the endpoints generated by the Kepler framework:
For detailed route information, see Kepler service structure and components
For example, you have a service call with the following signature:
1
Task DoStuffAsync(int a, int b, string name);
Your JSON payload would have the following format:
1
2
3
4
5
{
"a":42,
"b":99,
"name":"Ziggy"
}
Use valid JSON with the appropriate data types in the payload. The following formatting rules apply to certain data types:
You can add the assemblies for the Kepler framework as a NuGet package to your Visual Studio projects. You can download the Nuget package from https://www.nuget.org/packages/Relativity.Kepler.Client.SDK. You can also explore the Kepler Client SDK .NET API Reference for the SDK.
Review these FAQs for answers to general questions related to the Kepler framework.
RelativityOne and Relativity Server 10.3 and higher support custom Kepler services.
Note: The Visual Studio template for the Kepler framework is compatible with RelativityOne Goatsbeard update 1 patch 1 version 10.3.191.8 and above. It isn’t compatible with the Dev VMs for versions 10.3.107.60, 10.3.142.22, and 10.3.170.1. See Template for Kepler services.
The Relativity.Kepler.dll is available as a NuGet package that you can install in your Visual Studio project. For more information, see NuGet package for the Kepler framework.
No auditing is performed when an endpoint is accessed. RelativityOne environments collect APM metrics, but they aren't currently available to third-party developers. However, you can set the logging level, so that you can view calls to an endpoint. For more information, see Logging from Relativity applications.
A Kepler service must use bearer token authentication. The bearer token is obtained through an OAuth2 client. For more information, see Authentication for Kepler services.
To determine if your service is hosted, check its status by making a call to the following endpoint. For more information about the URI format, see Routing
1
<host>/Relativity.REST/api/{FullyQualifiedModuleName}/{UserFriendlyInterfaceName}/GetKeplerStatusAsync
If the service is hosted, this call returns the following response:
1
2
3
{
"Status":"OK"
}
Lowest Version | Highest Version |
---|---|
11.3.185.7 | Latest |
Lowest Version | Highest Version |
---|---|
11.3.185.7 | Latest |
Lowest Version | Highest Version |
---|---|
11.3.185.7 | Latest |
On this page
Why was this not helpful?
Check one that applies.
Thank you for your feedback.
Want to tell us more?
Great!
Additional Resources |
|||
DevHelp Community | GitHub | Release Notes | NuGet |