2013-07-10 227 views
1

是否有JavaScript的REST客户端的最佳做法。具体来说,我想知道 如何关注链接。 让说我有一个Task类REST JavaScript客户端

public class Task 
{ 
    public long TaskId { get; set; } 
    public string Subject { get; set; } 
    public bool Completed { get; set; } 
    public bool Canceled { get; set; } 
    public List<Link> Links { get; set; } 
} 

让我们说这个服务模型类的实例发送到JavaScript客户端:

{ 
    TaskId : '1', 
    Subject : 'Some', 
    Completed: false, 
    Canceled : false, 
    Links : [{Rel:'Completed', URL:'http://myadress/tasks/1/complete'}, 
      {Rel:'Canceled ', URL:'http://myadress/tasks/1/cancel'}] 

} 

现在我想完成这个任务。这应该通过跟随链接:完成。但如何做到这一点?如果我只是张贴到URL和抢任务的新的表述,或者我应该创造这样

var x = { 
    TaskId : '1', 
    Subject : 'Some', 
    Completed: false, 
    Canceled : false, 
    complete : function(callback){ 
       // post to completed URL, and callback with new representation 
       } 
    Links : [{Rel:'Complete', URL:'http://myadress/tasks/1/complete'}, 
      {Rel:'Cancel ', URL:'http://myadress/tasks/1/cancel'}]  
} 

x.complete(callback); 

或建立专门的功能?

function completeTask(task, callback){ 
var url = //search links property for rel:Colmplete and get URL 
//complete task 
//callback with the new representation 

} 
+0

这不回答你的问题,但它可能给你灵感。查看Node.js模块unio(https://github.com/ttezel/unio)。作为替代HATEOAS,它更映射在一个JSON规范中的一个REST API,并提供了使用该规范理解和消费API一个通用的客户端。即使您不能直接使用unio,它也可能会为您提供开发客户端代码的一些想法。 – superEb

回答

0

我不住在Javascript世界,但我相信我采取的方法仍然有效。我创建与链接关系相关的对象。因此,您将有一个completeLink对象和知道如何进行HTTP请求的'cancelLink'对象。

他们唯一缺少的信息是URI,你会从表示提取。客户可以选择更改默认的回调行为,因为并非所有客户都会对链接的响应做同样的事情。但是,所有客户端都应该能够重用逻辑来实际发出HTTP请求,因为链接关系明确定义了该行为。

我会怎么看,将看在JS很感兴趣。我希望我能更好地认识这门语言。