/RebrickableSharp

Easy-to-use C# client for the Rebrickable (LEGO) API.

Primary LanguageC#MIT LicenseMIT

RebrickableSharp

NuGet Build Status

Introduction

RebrickableSharp is a strongly-typed, easy-to-use C# client for the Rebrickable API that gets you started with just a few lines of code. It handles authentication, error handling and parsing of JSON into typed instances. It supports all .NET platforms compatible with .NET standard 2.0.

Related projects

  • BricklinkSharp - Easy-to-use C# client for the bricklink (LEGO) marketplace API.

Changelog

0.1.0

  • Authentication handling
  • HTTP request / response handling
  • New method on IRebrickableClient: GetColorsAsync. Returns a color list.
  • New method on IRebrickableClient: GetColorAsync. Returns a specific color.
  • New method on IRebrickableClient: GetPartsAsync. Returns a part list with various filter options.
  • New method on IRebrickableClient: FindPartByBricklinkIdAsync. Find a part by its BrickLink ID.
  • New method on IRebrickableClient: GetPartColorDetails. Gets details for a specific part / color combination.
  • New method on IRebrickableClient: GetElementAsync. Returns a specific element.

Get Started

Demo Project

Check out the demo project for full-featured examples.

Prerequisites

You need to have an account on Rebrickable. Then, go to Account > Settings > API and create a new Key or use an existing one.

Install NuGet Package

Package Manager Console

Install-Package RebrickableSharp

Command Line

nuget install RebrickableSharp

Setup credentials

RebrickableClientConfiguration.Instance.ApiKey = "<Your API Key>";

IRebrickableClient

var client = RebrickableClientFactory.Build();

// Do stuff

// Client must be disposed properly
client.Dispose();

Alternatively, an externally managed HttpClient can be used:

var httpClient = new HttpClient();
var client = RebrickableClientFactory.Build(httpClient);

// Do stuff

// Client *and* HttpClient must be disposed properly
client.Dispose();
httpClient.Dispose();

Usage recommendation

It's recommended to create and use one IRebrickableClient client throughout the lifetime of your application.

In applications using an IoC container you may register the IRebrickableClient as a service and inject it into consuming instances (e.g. controllers). See the below examples to register the IRebrickableClient as single instance (Singleton).

Autofac example

containerBuilder.Register(c => RebrickableClientFactory.Build())
	.As<IRebrickableClient>()
	.SingleInstance();
services.AddSingleton(typeof(IRebrickableClient), provider =>
{
    return RebrickableClientFactory.Build();
});  

Parts

Get parts

// API
Task<PagedResponse<Part>> GetPartsAsync(int page = 1, int pageSize = 100, 
    bool includeDetails = false, string? bricklinkId = null,
    string? partNumber = null, IEnumerable<string>? partNumbers = null,
    int? categoryId = null, string? brickOwlId = null,
    string? legoId = null, string? lDrawId = null,
    string? searchTerm = null,
    CancellationToken cancellationToken = default);
// Example
var response = await client.GetPartsAsync(page: 1, pageSize: 50, includeDetails: true, searchTerm: "M-Tron");
var parts = response.Results;

Find part by BrickLink ID

// API
Task<Part?> FindPartByBricklinkIdAsync(string bricklinkId,
    bool includeDetails = false,
    CancellationToken cancellationToken = default);
// Example
var part = await client.FindPartByBricklinkIdAsync("3005", true);

Get part color details

// API
Task<PartColorDetails> GetPartColorDetailsAsync(string partNumber, int colorId,
    CancellationToken cancellationToken = default);
// Example
var colorId = 1; //Blue
var partColorDetails = await client.GetPartColorDetailsAsync("3005", colorId)

Colors

Get colors

// API
Task<PagedResponse<Color>> GetColorsAsync(int page = 1, int pageSize = 100,
    bool includeDetails = false,
    CancellationToken cancellationToken = default);
// Example
var response = await client.GetColorsAsync(includeDetails: true,
    page: 1, pageSize: 50);
var colors = response.Results;

Get color

// API
Task<Color> GetColorAsync(int colorId, bool includeDetails = false, 
    CancellationToken cancellationToken = default);
// Example
var colorId = 0; //black
var black = await client.GetColorAsync(colorId, includeDetails: true);

Elements

Get element

// API
Task<Element> GetElementAsync(string elementId, 
    CancellationToken cancellationToken = default);  
// Example
var elementId = "300521"; //1x1 Brick in Red
var element = await client.GetElementAsync(elementId);