1

我认为这个问题更多的是关于 Web 服务的最佳实践,不一定仅限于 ServiceStack。从我在这里和 SS wiki 上读到的内容,实现父子实体的“推荐”方法是通过路由分解它们。

例如:

/Users/{UserID}
/Users/{UserID}/Entities

其中用户是登录用户,实体是他/她的项目。我正在实现 jqueryui 自动完成,这就是我怀疑我没有做正确的事情的地方。

在脚本中,路径需要用户 ID,所以我必须在浏览器中手动呈现它,以便它读取:

type: "GET",
url: "svc/users/**8**/entities",
data: { "SearchTerm": request.term, "Format": 'json' },

这对我来说是错误的。我有会话中的用户 ID,我可以通过这种方式获取它。所以我想知道是否有更好的方法来访问这些对象而不必将数据直接呈现到标记中?

我做错了吗?

附带说明:我知道我可以将这些数据放在隐藏字段中并通过脚本等访问它,我只是好奇是否有更好/推荐的方法通过会话来执行此操作,同时保持路由不变。

4

1 回答 1

2

通常这是通过另一个端点来完成的,例如 Facebook,使用/my/,但你可以做任何你想做的事情。

原因是,您很可能会为用户返回有关他们自己的信息,而不是您与其他人分享有关该用户的信息。

让我们假设/user/{UserId}/books返回用户最喜欢的书籍。如果我想知道某人最喜欢的书是什么,我可能会对书名和简短描述感兴趣,但如果我想查看(并可能管理)我最喜欢的书籍列表,那么我可能需要更多信息,例如当天我添加了最喜欢的书,或者我的朋友也喜欢这本书。

所以/user/{UserId}/books返回:

{
    "books":[
         { "title":"Hary Potter", "desc":"A boy who is magic..." }
    ]
}

但是/my/books返回:

{
    "books":[
         {
              "title":"Harry Potter",
              "desc":"A boy who is magic...",
              "friensWhoLikeBook":[
                  { "id":1234, "name":"Bob" }
              ],
              "personalCommentsAboutBookNotToBeShared":"This book changed my life..."
          }
     ]
 }
于 2013-05-09T21:13:59.207 回答