smartsheet / smartsheet-csharp-sdk

Library that uses C# to connect to Smartsheet services.
Apache License 2.0
14 stars 8 forks source link

Allow users to omit parameters for optional defaults #25

Closed lifebeyondfife closed 6 months ago

lifebeyondfife commented 1 year ago

Customer Issue

Many Smartsheet API calls allow for customisation of query options through a wide variety of optional properties. This can be shown by looking at one of the SDK interfaces for accessing Smartsheet functionality: retrieving a sheet.

From the SheetResources interface in smartsheet-csharp-sdk/main/Smartsheet/Api/SheetResources.cs

        Sheet GetSheet(
                    long sheetId,
                    IEnumerable<SheetLevelInclusion> includes,
                    IEnumerable<SheetLevelExclusion> excludes,
                    IEnumerable<long> rowIds,
                    IEnumerable<int> rowNumbers,
                    IEnumerable<long> columnIds,
                    long? pageSize,
                    long? page); 

The documentation for the parameters from includes onwards, denotes that the properties are optional as part of the task of retrieving a sheet e.g. /// <param name="includes"> used to specify the optional objects to include. </param>

The parameters are optional for the underlying http API call, but not for users of the C# SDK, who have to provide an input for all parameters, bar the final two, pageSize, and page, which are denoted as optional owing to them being a nullable long i.e. long?.

This results in invocations to the GetSheet implementation like this from https://github.com/smartsheet/smartsheet-csharp-sdk/blob/mainline/sdk-csharp-sample-net60/Program.cs#L30:

    var sheet = smartsheet.SheetResources.GetSheet(sheetId, null, null, null, null, null, null, null);

Proposal

A review of the interfaces throughout the API should take place to establish which of the parameters are optional, and which are mandatory. After identifying genuinely optional parameters, we can modify existing interfaces and implementations to mark parameters as optional using the Nullable operator ?.

We should then expect to see invocations to Smartsheet SDK functionality that omit parameters where they are the default:

    var sheet = smartsheet.SheetResources.GetSheet(sheetId);

Next Steps

Interfaces should be reviewed to consider which methods contain parameters which are permittable by the Smartsheet API to be null values.

The full list of interfaces to review: