<commit_before># Crest

![Icon](https://cdn.rawgit.com/samcragg/Crest/52010cbfabb5892d923d591a419122591a8085a1/docs/images/Icon.svg)

[![Build status](https://ci.appveyor.com/api/projects/status/spal08yea33stdlw/branch/master?svg=true)](https://ci.appveyor.com/project/samcragg/crest/branch/master) [![Coverage Status](https://coveralls.io/repos/github/samcragg/Crest/badge.svg?branch=master)](https://coveralls.io/github/samcragg/Crest?branch=master) ![License](https://img.shields.io/github/license/samcragg/crest.svg)

This library provides a simple way to create versioned RESTful micro-services
built against .NET Core with ease whilst remaining performant.

The HTTP side of the requests/responses is abstracted away as much as possible,
so writing the logic code looks just like a traditional server application,
making unit testing trivial. By hiding away as much as the HTTP request as
possible, multiple micro-services implemented with Crest will have a consistent
feel to them from the end users perspective, giving the feeling of a single
system yet allowing development to occur without tight coupling.

Creating the right API first time is difficult, however, getting third parties
to update their code is even harder. Therefore, there is strong support for
providing versioned routes, to allow for new functionality to be added without
effecting older clients.

# Basic usage

First create an interface that describes the routes. The XML documentation will
be converted to an [OpenAPI](https://www.openapis.org/) json for the project, so
be sure to include it - your API is your contract with the outside world so make<commit_msg>Add description of the provided functionality<commit_after># Crest

![Icon](https://cdn.rawgit.com/samcragg/Crest/52010cbfabb5892d923d591a419122591a8085a1/docs/images/Icon.svg)

[![Build status](https://ci.appveyor.com/api/projects/status/spal08yea33stdlw/branch/master?svg=true)](https://ci.appveyor.com/project/samcragg/crest/branch/master) [![Coverage Status](https://coveralls.io/repos/github/samcragg/Crest/badge.svg?branch=master)](https://coveralls.io/github/samcragg/Crest?branch=master) ![License](https://img.shields.io/github/license/samcragg/crest.svg)

This library provides a simple way to create versioned RESTful micro-services
built against .NET Core with ease whilst remaining performant.

The HTTP side of the requests/responses is abstracted away as much as possible,
so writing the logic code looks just like a traditional server application,
making unit testing trivial. By hiding away as much as the HTTP request as
possible, multiple micro-services implemented with Crest will have a consistent
feel to them from the end users perspective, giving the feeling of a single
system yet allowing development to occur without tight coupling.

Creating the right API first time is difficult, however, getting third parties
to update their code is even harder. Therefore, there is strong support for
providing versioned routes, to allow for new functionality to be added without
effecting older clients.

# Provided functionality

Out of the box the framework handles most of the mundane functionality to allow
you to get developing your service quickly:

+ Dependency injection with assembly scanning (i.e. it will map your interfaces
  to their concrete implementation for you).
+ Deserializing/serializing the HTTP request/response based on its content type
  (out of the box JSON, URL form encoded data and XML are supported).
+ OpenAPI documentation of endpoints
+ Health page
+ Basic metrics for the last 15 minutes
+ JWT handling

# Basic usage

First create an interface that describes the routes. The XML documentation will
be converted to an [OpenAPI](https://www.openapis.org/) JSON for the project, so
be sure to include it - your API is your contract with the outside world so make
{'fraction_non_alphanumeric': 0.07185473411154344, 'fraction_numerical': 0.017639429312581063, 'mean_word_length': 5.22940226171244, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 14, 'lorem ipsum': 0, 'www.': 2, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4450744', 'n_tokens_mistral': 1074, 'n_tokens_neox': 1011, 'n_words': 441}