Currently there is no concrete way to simplify how URI Templates are used throughout a Hydra application.
First, they are used as create resource identifiers for serialized objects. Currently the only way is to manually use a URI Template to construct the identifier
public class MyModel
{
public Uri Id { get; set; }
}
var model = new MyModel();
var template = new UriTemplate("path/{name}{?includeSub}");
model.Id = template.BindByName(new Dictionary<string, object>
{
{ "name", "guid" },
{ "includeSub", true }
});
Second, the very same template could be used for routing in Nancy. It is what I started implementing in Nancy.Routing.UriTemplates
public class MyModelModule : UriTemplateModule
{
public MyModelModule()
{
using (Templates)
{
Get("path/{name}{?includeSub}", _ => new MyModel());
}
}
}
By introducing a pattern similar to ServiceStack routing, where routing is part of the model it should be possible to simplify handling of URI Templates for routing and creating identifiers.
Something like
[IdentifierTemplate("path/{name}{?includeSub}")]
public class MyModel
{
public Uri Id { get; set; }
public string Name { get; set; }
}
var model = new MyModel { Name = "Tomasz" };
model.Id = model.BindTemplate(new { includeSub = true });
The BindTemplate would be an extension which looks for IdentifierTemplateAttribute on given instance's type and uses passed params and/or property values to fill in the template.
And finally, the route path wouldn't be needed at all in module
// ArgolisModule inheriting UriTemplateModule
public class MyModelModule : ArgolisModule
{
public MyModelModule()
{
using (Templates)
{
Get<MyModel>(_ => new MyModel());
}
}
}
Currently there is no concrete way to simplify how URI Templates are used throughout a Hydra application.
First, they are used as create resource identifiers for serialized objects. Currently the only way is to manually use a URI Template to construct the identifier
Second, the very same template could be used for routing in Nancy. It is what I started implementing in Nancy.Routing.UriTemplates
By introducing a pattern similar to ServiceStack routing, where routing is part of the model it should be possible to simplify handling of URI Templates for routing and creating identifiers.
Something like
The
BindTemplatewould be an extension which looks forIdentifierTemplateAttributeon given instance's type and uses passed params and/or property values to fill in the template.And finally, the route path wouldn't be needed at all in module