Saule is a JSON API (version 1.0) library for ASP.Net Web API 2. Install Saule using NuGet:
Install-Package saule
We made custom booker-saule
branch where we would have our changes. And Master branch would be identitcal to original repo, so we can fetch changes from there to match latest version and then merge to booker-saule
branch. We will use this branch for builds.
To use Saule, you must define resources that contain the information about your domain:
public class PersonResource : ApiResource
{
public PersonResource()
{
Attribute("FirstName");
Attribute("LastName");
Attribute("Age");
BelongsTo<CompanyResource>("Job");
HasMany<PersonResource>("Friends");
}
}
public class CompanyResource : ApiResource
{
public CompanyResource()
{
Attribute("Name");
Attribute("NumberOfEmployees");
}
}
You can then use these to serialize any class into Json Api (as long as your class has properties with the same names as in your model):
public class PersonController : ApiController
{
[HttpGet]
[ReturnsResource(typeof(PersonResource))]
[Route("people/{id}")]
public JohnSmith GetPerson(string id)
{
return new JohnSmith();
}
}
GET http://example.com/people/123
{
"data": {
"type": "person",
"id": "123",
"attributes": {
"first-name": "John",
"last-name": "Smith",
"age": 34
},
"relationships": {
"job": {
"links": {
"self": "http://example.com/people/123/relationships/job/",
"related": "http://example.com/people/123/job/"
},
"data": {
"type": "company",
"id": "456"
}
},
"friends": {
"links": {
"self": "http://example.com/people/123/relationships/friends/",
"related": "http://example.com/people/123/friends/"
},
"data": [
{
"type": "person",
"id": "789"
}
]
}
}
},
"included": [
{
"type": "company",
"id": "456",
"attributes": {
"name": "Awesome, Inc.",
"number-of-employees": 24
}
},
{
"type": "person",
"id": "789",
"attributes": {
"first-name": "Sara",
"last-name": "Jones",
"age": 38
}
}
],
"links": {
"self": "http://example.com/people/123"
}
}
Deserialization works just like in normal Web API; you don't need to do anything special to make this work.
Follow the steps below to create a new release:
- Create a branch called
release-v<version>
(e.g.release-v1.5
) - Increase the version number in
appveyor.yml
inmaster
- Push both changes and wait for the build
- Copy the release notes into the release description on Github
- Publish the new release