Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/neurospeech/retro-core-fit

REST Library similar to Retrofit for .NET Core
https://github.com/neurospeech/retro-core-fit

Last synced: about 2 months ago
JSON representation

REST Library similar to Retrofit for .NET Core

Awesome Lists containing this project

README

        

# Retrofit Core

1. No build step
2. Dynamic Service Proxy generator
3. Support for Header as property
4. Generic RequestBuilder

# Example
```c#

public interface IBackendService {

// when set, it will always be sent with
// every request
[Header("access-key")]
AccessKey { get; set; }

[Get("/location/{ip}")]
Task GetLocationInfoAsync([Path("ip")] string ip);

[Post("/location/{ip}")]
Task SaveLocationInfoAsync([Path("ip")] string ip, [Body] IPInfo info);

[Get("/voice/{id}.mp3")]
Task GetByteArrayAsync([Query("id")] string id);

// Response Object with Header
[Get("/projects")]
Task> GetProjectsAsync();

// Retrieve http response for detailed response.
// HttpResponseMessage is not disposed, it is responsibility of caller
// to dispose the message (which will close open network streams)
// This will not throw an error message if there was HTTP Error.
[Get("/video/{id}.mp4")]
Task GetRawResponseAsync([Query("id")] string id);

// Multi Part Form for uploads...
[Post("/upload")]
Task UploadFile(
// other form element items
[Multipart("name")] string attachmentName,

// it can accept stream
[MultipartFile("file1")] Stream fileStream,

// it can accept HttpContent which may contain content type
[MultipartFile("file2")] HttpContent someOtherContent
);

}

public class GitLabResponse: ApiResponse {

// set by RetroClient when response is received
[Header("x-total-pages")]
public int TotalPages {get;set;}

}

```

# Usage
```c#

var client = RetroClient.Create( new Uri("base url...") , httpClient);

```

# Request Builder
```c#

// get request
RequestBuilder.Get("/location/{ip}")
.Path("ip", ipAddress)
.GetResponseAsync(httpClient);

// post request
RequestBuilder.Post("/location/{ip}")
.Path("ip", ipAddress)
.Body(info)
.GetResponseAsync(httpClient);

// get raw response
RequestBuilder.Post("/location/{ip}")
.Path("ip", ipAddress)
.Body(info)
.GetResponseAsync(httpClient); // no generics

// Multipart Upload
RequestBuilder.Post("/upload")
.Multipart("name", attachmentName)
.MultipartFile("file1", fileStream, fileName: "photo.jpg")
.GetResponseAsync(httpClient);

// Get Api Response with Headers...
RequestBuilder.Post("/api/v4/projects/{id}")
.Path("id", projectId)
.GetResponseAsync>(httpClient);

public class GitLabResponse: ApiResponse {

// set by RetroClient when response is received
[Header("x-total-pages")]
public int TotalPages {get;set;}

}

```