Nancy.Rest.Client 1.4.3.9-beta

This is a prerelease version of Nancy.Rest.Client.
There is a newer version of this package available.
See the version list below for details.
dotnet add package Nancy.Rest.Client --version 1.4.3.9-beta                
NuGet\Install-Package Nancy.Rest.Client -Version 1.4.3.9-beta                
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.
<PackageReference Include="Nancy.Rest.Client" Version="1.4.3.9-beta" />                
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add Nancy.Rest.Client --version 1.4.3.9-beta                
#r "nuget: Nancy.Rest.Client, 1.4.3.9-beta"                
#r directive can be used in F# Interactive and Polyglot Notebooks. Copy this into the interactive tool or source code of the script to reference the package.
// Install Nancy.Rest.Client as a Cake Addin
#addin nuget:?package=Nancy.Rest.Client&version=1.4.3.9-beta&prerelease

// Install Nancy.Rest.Client as a Cake Tool
#tool nuget:?package=Nancy.Rest.Client&version=1.4.3.9-beta&prerelease                

Nancy.Rest.Client

Dynamic proxy client generation for Nancy using Nancy.Rest.Module.

Prerequisites

A server using Nancy & Nancy.Rest.Module.

It is recommended you read the Nancy.Rest.Module documentation to understand how the server mount the services before continuing reading.

Installation

Or

Add your server models and interface with the method signatures to use.

Basic Usage

####Your Server signatures:


namespace Nancy.Rest.ExampleServer
{
    [RestBasePath("/api")]
    public interface IExample
    {
        [Rest("Person", Verbs.Get)]
        List<Person> GetAllPersons();
        
        [Rest("Person/{personid}", Verbs.Get)]
        Person GetPerson(int personid);
        
        [Rest("Person", Verbs.Post)]
        bool SavePerson(Person person);

        [Rest("Person/{personid}", Verbs.Delete)]
        bool DeletePerson(int personid);
    }
}

####Your Server Models


namespace Nancy.Rest.ExampleServer
{    
    public class Person
    {
        public string FirstName { get; set; }

        public string LastName { get; set; }
        
        [Level(1)]
        public bool IsProgrammer { get; set; }
        
        [Tags("Attr")]
        public List<string> Attributes { get; set; }
    }
}

Your Client

namespace Nancy.Rest.ExampleClient
{    
    public class Example
    {
        public void Run()
        {
            IExample server=ClientFactory.Create<IExample>("http://yourserver/api"); `
        
            List<Person> persons=server.GetPersons();
            
        }
    }
}

##Advanced Usage

###Transversal Filtering

Nancy.Rest.Client includes this interface.


using System.Collections.Generic;

namespace Nancy.Rest.Client.Interfaces
{
    public interface IFilter<T>
    {
        T FilterWithLevel(int level);

        T FilterWithTags(IEnumerable<string> tags);

        T FilterWithLevelAndTags(int level, IEnumerable<string> tags);

    }
}

Create a new interface in your client that includes, both, IFilter interface and your server interface.


namespace Nancy.Rest.ExampleClient
{    
    public interface IExampleWithFiltering : IExample, IFilter<IExample>
    {
    }
}

Then you can use the transversal filtering capabilities of the server like this:


namespace Nancy.Rest.ExampleClient
{    
    public class Example
    {
        public void Run()
        {
            IExampleWithFiltering server=ClientFactory.Create<IExampleWithFiltering>("http://yourserver/api"); `
        
            //Per example, you can ask the server to not serialize any property with level bigger than the number provided.
            //Here we can filter the IsProgrammer property using levels.
            List<Person> persons=server.FilterWithLevel(0).GetPersons();
            //Or remove the Attributes property using Tags.            
            List<Person> persons=server.FilterWithTags(new string[] { "Attr"}).GetPersons();            
            
        }
    }
}

###Controlable deserialization

Imagine you have your poco models from the server, but you need to add some properties, methods or INotifyPropertyChanged to that objects, you create a child class from the model, and add all those things. The problem is, the deserialzer will deserialize your poco model, so you have to create a new child class, and copy all properties to your child. Nancy.Rest.Client have the capability of deserializing the objects to child objects.

####Client model


namespace Nancy.Rest.ExampleClient
{    
    public class ClientPerson : Person
    {
        public bool IsSuperman { get; set; }
        
        public void DoSomeNastyThings()
        {
        //Kidding
        }
    }
}

####Example


namespace Nancy.Rest.ExampleClient
{    
    public class Example
    {
        public void Run()
        {
            Dictionary<Type,Type> mappings=new Dictionary<Type,Type>();
            //Here we add the mapping, we want every person to be deserialized as ClientPerson
            mappings.Add(typeof(Person), typeof(ClientPerson));
            IExample server=ClientFactory.Create<IExample>("http://yourserver/api", mappings); `
            //Here is your list of client persons
            List<ClientPerson> persons=server.GetPersons().Cast<ClientPerson>.ToList();
        }
    }
}

##WARNING

THIS IS AN BETA VERSION, so far it works on my machine 😉

TODO

  • Fill the blanks 😛

History

1.4.3-Beta: Removed bugs, published nugets. 1.4.3-Alpha: First Release

Built With

Credits

License

This project is licensed under the MIT License - see the LICENSE.md file for details

Product Compatible and additional computed target framework versions.
.NET Framework net452 is compatible.  net46 was computed.  net461 was computed.  net462 is compatible.  net463 was computed.  net47 was computed.  net471 was computed.  net472 was computed.  net48 was computed.  net481 was computed. 
Compatible target framework(s)
Included target framework(s) (in package)
Learn more about Target Frameworks and .NET Standard.

NuGet packages

This package is not used by any NuGet packages.

GitHub repositories

This package is not used by any popular GitHub repositories.

Version Downloads Last updated
1.4.4 876 5/31/2020
1.4.3.9-beta 967 12/5/2017