2013-07-10 281 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很感興趣。我希望我能更好地認識這門語言。