WCF休息方法和URI的命名约定?

时间:2010-08-07 15:20:31

标签: wcf visual-studio-2010 rest wcf-rest

我想知道是否有人可以确认我使用的命名约定是正确的,我刚开始并且真的不想养成坏习惯

这是我的......(见评论)

基本上我有一个名为GetTasks的方法,但是uri是任务 - 我认为这是要走的路?

我还有一个名为GetUser的方法,其中Uri是(复数)Users / {id}

在我继续之前的任何确认都会很棒..谢谢..

这是我目前的方法..

    [WebGet(UriTemplate = "Tasks")]
    public List<SampleItem> GetTasks()  //RETURNS a COLLECTION
    {
        // TODO: Replace the current implementation to return a collection of SampleItem instances
        return new List<SampleItem>() { new SampleItem() { Id = 1, StringValue = "Hello" } };
    }


    [WebGet(UriTemplate = "Users/{id}")]
    public SampleItem GetUser(string id) // RETURNS A USER
    {
        // TODO: Return the instance of SampleItem with the given id
        //throw new NotImplementedException();
        return new SampleItem() {Id = 1, StringValue = "Hello"};
    }

    [WebInvoke(UriTemplate = "Users/{id}", Method = "PUT")]
    public SampleItem UpdateUser(string id, SampleItem instance) // UPDATES A USER
    {
        // TODO: Update the given instance of SampleItem in the collection
        throw new NotImplementedException();
    }

    [WebInvoke(UriTemplate = "Users/{id}", Method = "DELETE")]
    public void DeleteUser(string id) // DELETES A USER
    {
        // TODO: Remove the instance of SampleItem with the given id from the collection
        throw new NotImplementedException();
    }

1 个答案:

答案 0 :(得分:1)

嗯,有时模仿是最好的奉承形式。如果您查看StackOverflow,他们会使用users/{userid}/...作为其URI约定。通常,对实体使用复数,然后让下一个段(如果存在)描述该操作似乎是相当标准的。这通常是我定义RESTful服务的方向:

GET      /Users         -- return all users
GET      /Users/{id}    -- return a single user
POST     /Users         -- insert a user
PUT      /Users/{id}    -- update a user
DELETE   /Users/{id}    -- delete a user

这也很适合WCF数据服务。虽然您定义了实体名称,但模式通常是相同的。不错的是,您还可以在GET的URL上定义查询,并再次遵循该模式:

GET     /Users?$top=10&filter=name eq 'Steve'  -- return top 10 users who's name is steve

所以我认为你正朝着正确的方向前进。您是否考虑过WCF数据服务?它为您构建这些实体操作 - 但根据您的要求,它可能不是正确的解决方案。

祝你好运。希望这会有所帮助。