publish pattern example
based on my 'enlightening moment' yesterday, i sat down to build a simple 'publish-pattern' example using exyus. i'll post it as an article later this weekend.
it was pretty simple. just implement the /articles/{id}
resource as usual (using XmlSqlResource and then add a new resource to handle the publish actions - /articles/{id}/status
. this second resource only accepts GET and PUT methods.
the exyus code (C#) is small, as usual:
using System; using Exyus.Web; namespace Exyus.Samples { [UriPattern(@"/articles/(?<id>[0-9]*)\.xcs")] [MediaTypes("text/xml")] class Articles : XmlSqlResource { public Articles() { this.AllowCreateOnPut = false; this.AllowDelete = true; this.AllowPost = true; this.ConnectionString = "exyus_samples"; this.ContentType="text/xml"; this.DocumentsFolder = "~/documents/articles/"; this.LocalMaxAge = 600; this.PostLocationUri = "/articles/"; this.RedirectOnPost = true; this.RedirectOnPut = true; this.ImmediateCacheUriTemplates = new string[] { "/articles/.xcs", "/articles/{id}.xcs" }; } } [UriPattern(@"/articles/(?<id>[0-9]*)/status\.xcs")] [MediaTypes("text/xml")] class ArticleStatus : XmlSqlResource { public ArticleStatus() { this.AllowCreateOnPut = false; this.AllowDelete = false; this.AllowPost = false; this.ConnectionString = "exyus_samples"; this.ContentType = "text/xml"; this.DocumentsFolder = "~/documents/articles/status/"; this.LocalMaxAge = 600; this.RedirectOnPut = true; this.ImmediateCacheUriTemplates = new string[] { "/articles/{id}/status.xcs", "/articles/.xcs", "/articles/{id}.xcs" }; } public override void Delete() { throw new System.Web.HttpException(405, "Unable to DELETE resource"); //base.Delete(); } public override void Post() { throw new System.Web.HttpException(405, "Unable to POST resource"); //base.Post(); } } }
the XSLT was also simple (more on that in the article). the only other itemswas the SQL sproc work. since i'm using SQL Server 2005, i have some great XML support at the ready. for example, i use SQL Server's ability to return streaming XML to make it easy to handle datawithin the exyus engine. here's an example of getting a list of articles in the database:
CREATE PROCEDURE [dbo].[articles_list] @status nvarchar(50) = null AS BEGIN SET NOCOUNT ON; select id as '@id', [status] as 'status', datecreated as 'date-created', title, body from articles where @status is null or @status=[status] order by datecreated desc for xml path('article'), root('articles') END
slick!