Proyecto26.RestClient 1.2.0

.NET Framework 3.5
There is a newer version of this package available.
See the version list below for details.
NuGet\Install-Package Proyecto26.RestClient -Version 1.2.0
This command is intended to be used within the Package Manager Console in Visual Studio, as it uses the NuGet module's version of Install-Package.
dotnet add package Proyecto26.RestClient --version 1.2.0
<PackageReference Include="Proyecto26.RestClient" Version="1.2.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Proyecto26.RestClient --version 1.2.0
#r "nuget: Proyecto26.RestClient, 1.2.0"
#r directive can be used in F# Interactive, C# scripting and .NET Interactive. Copy this into the interactive tool or source code of the script to reference the package.
// Install Proyecto26.RestClient as a Cake Addin
#addin nuget:?package=Proyecto26.RestClient&version=1.2.0

// Install Proyecto26.RestClient as a Cake Tool
#tool nuget:?package=Proyecto26.RestClient&version=1.2.0

RestClient for Unity 🤘

This HTTP/REST Client is based on Promises to avoid the Callback Hell ☠️ and the Pyramid of doom 💩 working with Coroutines in Unity 🎮, example:

var root = "https://jsonplaceholder.typicode.com";
RestClient.GetArray<Post>(root + "/posts", (err, res) => {
  RestClient.GetArray<Todo>(root + "/todos", (errTodos, resTodos) => {
    RestClient.GetArray<User>(root + "/users", (errUsers, resUsers) => {
      if(err != null){
        EditorUtility.DisplayDialog ("Error", errTodos.Message, "Ok");
      }
    });
  });
});

But working with Promises we can improve our code, yay! 👏

RestClient.GetArray<Post>(root + "/posts").Then(response => {
  EditorUtility.DisplayDialog ("Success", JsonHelper.ArrayToJson<Post>(response, true), "Ok");
  return RestClient.GetArray<Todo>(root + "/todos");
}).Then(response => {
  EditorUtility.DisplayDialog ("Success", JsonHelper.ArrayToJson<Todo>(response, true), "Ok");
  return RestClient.GetArray<User>(root + "/users");
}).Then(response => {
  EditorUtility.DisplayDialog ("Success", JsonHelper.ArrayToJson<User>(response, true), "Ok");
}).Catch(err => EditorUtility.DisplayDialog ("Error", err.Message, "Ok"));

Demo ⏯

Do you want to see this beautiful package in action? Download the demo here

Demo

Installation 👨‍💻

Nuget package

Download this package from NuGet with Visual Studio creating a NuGet.config file at the root of your Unity Project, for example:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <config>
    <add key="repositoryPath" value="./Assets/Packages" />
  </config>
</configuration>

The package to search for is Proyecto26.RestClient.

Getting Started 📚

The default methods (GET, POST, PUT, DELETE) are:

RestClient.Get("https://jsonplaceholder.typicode.com/posts/1").Then(response => {
  EditorUtility.DisplayDialog("Response", response, "Ok");
})

RestClient.Post("https://jsonplaceholder.typicode.com/posts", newPost).Then(response => {
  EditorUtility.DisplayDialog("Status", response.statusCode.ToString(), "Ok");
})

RestClient.Put("https://jsonplaceholder.typicode.com/posts/1", updatedPost).Then(response => {
  EditorUtility.DisplayDialog("Status", response.statusCode.ToString(), "Ok");
})

RestClient.Delete("https://jsonplaceholder.typicode.com/posts/1").Then(response => {
  EditorUtility.DisplayDialog("Status", response.statusCode.ToString(), "Ok");
})

But we are going to create a class "User" and the HTTP requests to load JSON data easily:

[Serializable]
public class User
{
  public int id;
  public string name;
  public string username;
  public string email;
  public string phone;
  public string website;
}
  • GET JSON
var usersRoot = "https://jsonplaceholder.typicode.com/users"; 
RestClient.Get<User>(usersRoot + "/1").Then(firstUser => {
  EditorUtility.DisplayDialog("JSON", JsonUtility.ToJson(firstUser, true), "Ok");
})
  • GET Array
RestClient.GetArray<User>(usersRoot).Then(allUsers => {
  EditorUtility.DisplayDialog("JSON Array", JsonHelper.ArrayToJsonString<User>(allUsers, true), "Ok");
})

Also we can create different classes for custom responses:

[Serializable]
public class CustomResponse
{
  public int id;
}
  • POST
RestClient.Post<CustomResponse>(usersRoot, newUser).Then(customResponse => {
  EditorUtility.DisplayDialog("JSON", JsonUtility.ToJson(customResponse, true), "Ok");
})
  • PUT
RestClient.Put<CustomResponse>(usersRoot + "/1", updatedUser).Then(customResponse => {
  EditorUtility.DisplayDialog("JSON", JsonUtility.ToJson(customResponse, true), "Ok");
})

Custom HTTP Headers and Options 💥

HTTP Headers, such as Authorization, can be set in the DefaultRequestHeaders object for all requests

RestClient.DefaultRequestHeaders["Authorization"] = "Bearer ...";

Also we can add specific options and override default headers for a request

var requestOptions = new RequestHelper { 
  url = "https://jsonplaceholder.typicode.com/photos",
  headers = new Dictionary<string, string>{
    { "Authorization", "Other token..." }
  }
};
RestClient.GetArray<Photo>(requestOptions).Then(response => {
  EditorUtility.DisplayDialog("Header", requestOptions.GetRequestHeader("Authorization"), "Ok");
})

And later we can clean the default headers for all requests

RestClient.CleanDefaultHeaders();

Collaborators 🥇

https://github.com/jdnichollsc

Credits 👍

Supporting 🍻

I believe in Unicorns 🦄 Support me, if you do too.

Happy coding 💯

Made with ❤️

Nicholls

Product Versions
.NET Framework net35 net40 net403 net45 net451 net452 net46 net461 net462 net463 net47 net471 net472 net48
Compatible target framework(s)
Additional computed target framework(s)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories (1)

Showing the top 1 popular GitHub repositories that depend on Proyecto26.RestClient:

Repository Stars
proyecto26/RestClient
🦄 A Promise based REST and HTTP client for Unity 🎮
Version Downloads Last updated
2.6.2 244 12/28/2021
2.6.1 562 6/10/2020
2.6.0 510 9/20/2019
2.5.9 385 9/9/2019
2.5.8 374 9/9/2019
2.5.7 414 6/22/2019
2.5.6 494 4/23/2019
2.5.5 428 4/20/2019
2.5.4 432 4/18/2019
2.5.2 522 1/23/2019
2.5.1 482 1/21/2019
2.4.2 548 1/14/2019
2.4.1 530 1/10/2019
2.2.1 611 1/2/2019
2.2.0 561 11/21/2018
2.1.1 639 8/26/2018
2.1.0 595 8/23/2018
2.0.1 622 7/27/2018
2.0.0 758 5/22/2018
1.2.2 768 3/4/2018
1.2.1 966 10/21/2017
1.2.0 756 10/20/2017
1.0.1 666 10/15/2017

Added Default Request Headers for all requests and the option to specific headers per request