我正在使用Django REST Framework构建REST Web API.事情进展顺利,但我遇到了嵌套资源的问题.首先,REST API中的所有关系都是超链接的.例如,帖子看起来像这样:
{
"path": "http://api.myproject.com/posts/1.json",
"id": 1,
"author": "http://api.myproject.com/users/broak.json",
"image": "/images/posts/cxyUzlPo.jpg",
"header": "Who am I?",
"footer": "I am a champion!",
"date": "2014-11-09 15:16",
"likes": "http://api.myproject.com/posts/1/likes.json",
"comments": "http://api.myproject.com/posts/1/comments.json",
"likes_count": 0,
"comments_count": 0
}
Run Code Online (Sandbox Code Playgroud)
帖子和作者(用户)之间的关系是超链接的.如果要创建新帖子,则需要指定指向特定用户的正确超链接 - 这样可以正常工作.
当调用帖子列表时,事情变得低效,因为你必须为每个帖子为每个作者进行额外的API调用.我通过使用NESTED资源而不是HYPERLINKED资源解决了这个问题,因此每个帖子现在都包含有关作者的所有信息.
{
"path": "http://api.myproject.com/posts/1.json",
"id": 1,
"author": {
"email": "broak@gmail.com"
"username": "broak",
"first_name: "John",
"last_name": "Broak",
"is_staff": False,
"is_active": True,
"last_login": "02-26-2016"
},
"image": "/images/posts/cxyUzlPo.jpg",
"header": "Who am I?",
"footer": "I am a champion!",
"date": "2014-11-09 15:16",
"likes": "http://api.myproject.com/posts/1/likes.json",
"comments": "http://api.myproject.com/posts/1/comments.json", …Run Code Online (Sandbox Code Playgroud) 我正在设计一个REST Web API,但最近发现了一些奇怪的东西.
显然,一些代理服务器阻止了特定的HTTP请求方法.在我的例子中,PUT和PATCH方法对于修改资源至关重要.这部分打破了我正在设计的API的功能......
在不破坏RESTful架构约束的情况下,是否有一种绕过此问题的好方法?在我看来没有,因为在通过HTTP设计REST Web API时,提倡完全使用HTTP动词...
我想知道JPA规范中是否要使用等效的ResultTransformer.DISTINCT_ROOT_ENTITY?现在,我正在尝试实现搜索功能,为此我必须使用JPA规范(不允许使用CriteriaQuery或其他替代方法)。
我必须在搜索查询中执行JOIN,因为实体之间存在一对多的关系。
所以,现在,我正在这样做:
String type = "admin";
SpecificationBuilder sb = SpecificationBuilder.getInstance();
Specification<WebContentImpl> spec = new Specification<WebContentImpl>() {
@Override
public Predicate toPredicate(Root<WebContentImpl> root, CriteriaQuery<?> cq, CriteriaBuilder cb) {
return cb.equal(root.join("users", JoinType.LEFT).get("type"), type);
}
};
sb.addSpecification(spec);
Run Code Online (Sandbox Code Playgroud)
如您所见,我可以包含一个JOIN。多个用户被映射到一个Web内容项。但是,例如,当有3个用户映射到1个Web内容项时,该Web内容项仅应显示1次,而应显示3次。过去我曾遇到过此问题,标志ResultTransformer.DISTINCT_ROOT_ENTITY当时帮助了我,但现在无法使用该功能。
当然,我可以实施自己的解决方案以省去双打,但这对于性能而言将是可怕的。而且我已经尝试过更改JoinType,但结果始终相同。
有人在那里有一些提示可以帮助我吗?:-)
提前致谢!
亲切的问候,K
我正在尝试建立像Instagram这样的小众社交网络作为Python/Django应用程序.
所以关于架构,我需要的东西是(我猜):
在此之前,我只对一些不太简单的网站构建简单,但从来没有非常复杂的自定义API等.我以前从未构建过自己的REST API(我已经使用过其他REST API),甚至构建了一个Android/iPhone应用程序并将其分发到Play商店/ App Store(尽管我已经制作了一些典型的hello world示例).
所以,对我来说最重要的事情似乎是首先创建一个kick-ass REST API并从那里开始.然而我被几个问题阻止了.
在此先感谢您的帮助!如果有人知道这个主题(架构)的一些精彩演示,请随时欢迎!
亲切的问候,克里斯托夫