用于在Twitter克隆应用中关注用户的Spring Rest Api设计?

时间:2018-07-31 08:09:43

标签: spring rest spring-boot spring-rest

我想设计一个Twitter克隆演示应用程序,使用户可以关注任何其他用户。但是我怀疑我其余的api设计。请建议我是对的。 我可以在url中传递followerId而不是将其作为requestbody传递吗,因为我们已经知道Advance中的followerId,并且服务器不在此处创建followerId? 以及是否有更好的选择,例如put / patch或任何其他api设计?

请建议我更好的设计

JwtUser是经过身份验证的用户

        public class FollowerDto {
            private Long followerId;
            private boolean following;
            public FollowerDto() {
            }
            public FollowerDto(Long followerId, boolean following) {
                this.followerId = followerId;
                this.following = following;
            }
            public boolean getFollowing() {
                return following;
            }
            public void setFollowing(boolean following) {
                this.following = following;
            }
            public Long getFollowerId() {
                return followerId;
            }
            public void setFollowerId(Long followerId) {
                this.followerId = followerId;
            }
        }

                @PostMapping("/follower")
                @ResponseStatus(HttpStatus.CREATED)
                public StatusDto addFollower(@RequestBody @Valid final FollowerDto 
                followerDto, @CurrentUser final JwtUser user, final 
                HttpServletResponse response) {
                RestPreconditions.checkRequestElementNotNull(followerDto); 

               RestPreconditions.checkArgumentCondition(followerDto.getFollowing());
                return userService.addFollower(user, followerDto.getFollowerId(),
                response);
            }

      // Service Layer
        @Override
        public StatusDto addFollower(final JwtUser jwtUser, final Long followerId, final HttpServletResponse response) {
            final User follower = userRepository.findById(followerId).orElse(null);
            ServicePreconditions.checkEntityExists(follower, "Follower does not exist with id " + followerId);
            final User currentUser = userRepository.findByEmail(jwtUser.getEmail());
            if (currentUser != null) {
                ServicePreconditions.checkOKArgument(!currentUser.equals(follower));
                final Set<User> existingFollowers = currentUser.getFollowers();
                if (existingFollowers != null) {
                    existingFollowers.add(follower);
                } else {
                    currentUser.setFollowers(Sets.<User>newHashSet(follower));
                }
                userRepository.save(currentUser);
                final URI uri = ServletUriComponentsBuilder.fromCurrentRequestUri().path("/{idOfNewResource}").buildAndExpand(follower.getId()).toUri();
                response.setHeader(HttpHeaders.LOCATION, uri.toASCIIString());
                return new StatusDto("Follower Added Successfully to user having email " + jwtUser.getEmail());
            }
            return new StatusDto("Follower is not Added to user with email " + jwtUser.getEmail());
        }

0 个答案:

没有答案