An web service based backend server for a twitter-esque dummy software.
- New user can open a new account.
- Old user can login.
- User can post a post.
- User can like a post.
- User can dislike a post.
- User can comment under a post.
- User can reply under a comment.
- User can see an individual post that will show the post and the comments and replies under it.
- User can follow other users
- User can unfollow other users
- User can see a home feed that would show all the posts that have been made buy users they follow.
- User can see a profile for any users where all the posts that user made along with their follower and following count will be shown
- User can see who a user follows.
- User can see who follows a user.
- Each Post, Comment, Reply will be checked for strikable parts. If it contains that, user will receive a strike and the post/comment/reply will not be posted. after a certain number of strike, a user will be permanently banned from posting, commenting or replying.
- Send Messages to other users
- See previous messages with a user chronologically
- See a list of all the conversation with the last message of each conversation.
- User: Entity
- Post: Entity
- Comment : Entity
- GenerateFeed : Service
- GenerateProfile : Service
- OnePost : Service
- StrikeChecker : Utility
- Messaging: Entity
The mentioned features are implemented through the following relationship between the services
Service URL: http://localhost:8081/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:user="http://fm.com/lifevoy/v2/user">
<soapenv:Header/>
<soapenv:Body>
<user:LoginRequest>
<user:username>username1</user:username>
<user:password>password1</user:password>
</user:LoginRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8081/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:user="http://fm.com/lifevoy/v2/user">
<soapenv:Header/>
<soapenv:Body>
<user:SignupRequest>
<user:username>username11</user:username>
<user:password>password11</user:password>
</user:SignupRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8081/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:user="http://fm.com/lifevoy/v2/user">
<soapenv:Header/>
<soapenv:Body>
<user:FollowUserRequest>
<user:requesterUsername>username3</user:requesterUsername>
<user:targetUsername>username4</user:targetUsername>
</user:FollowUserRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8081/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:user="http://fm.com/lifevoy/v2/user">
<soapenv:Header/>
<soapenv:Body>
<user:UnfollowUserRequest>
<user:requesterUsername>username1</user:requesterUsername>
<user:targetUsername>username3</user:targetUsername>
</user:UnfollowUserRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8081/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:user="http://fm.com/lifevoy/v2/user">
<soapenv:Header/>
<soapenv:Body>
<user:GetFollowersRequest>
<user:username>username3</user:username>
</user:GetFollowersRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8081/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:user="http://fm.com/lifevoy/v2/user">
<soapenv:Header/>
<soapenv:Body>
<user:GetFollowingsRequest>
<user:username>username1</user:username>
</user:GetFollowingsRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8084/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:feed="http://www.fm.com/lifevoy/v2/feed">
<soapenv:Header/>
<soapenv:Body>
<feed:GetFeedRequest>
<feed:username>username1</feed:username>
</feed:GetFeedRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8085/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:prof="http://www.fm.com/lifevoy/v2/profile">
<soapenv:Header/>
<soapenv:Body>
<prof:GetProfileRequest>
<prof:username>username3</prof:username>
</prof:GetProfileRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8082/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:post="http://fm.com/lifevoy/v2/post">
<soapenv:Header/>
<soapenv:Body>
<post:CreatePostRequest>
<post:posterUsername>username1</post:posterUsername>
<post:text>shesher post</post:text>
</post:CreatePostRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8086/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:onep="http://www.fm.com/lifevoy/v2/onepost">
<soapenv:Header/>
<soapenv:Body>
<onep:GetOnePostRequest>
<onep:postID>15</onep:postID>
</onep:GetOnePostRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8082/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:post="http://fm.com/lifevoy/v2/post">
<soapenv:Header/>
<soapenv:Body>
<post:LikePostRequest>
<post:postID>3</post:postID>
<post:requesterUsername>username5</post:requesterUsername>
</post:LikePostRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8082/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:post="http://fm.com/lifevoy/v2/post">
<soapenv:Header/>
<soapenv:Body>
<post:DislikePostRequest>
<post:postID>3</post:postID>
<post:requesterUsername>username3</post:requesterUsername>
</post:DislikePostRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8083/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://fm.com/lifevoy/v2/comment">
<soapenv:Header/>
<soapenv:Body>
<com:CommentRequest>
<com:postID>11</com:postID>
<com:username>username2</com:username>
<com:text>lol</com:text>
</com:CommentRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:8083/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:com="http://fm.com/lifevoy/v2/comment">
<soapenv:Header/>
<soapenv:Body>
<com:ReplyRequest>
<com:commentID>?</com:commentID>
<com:username>?</com:username>
<com:text>?</com:text>
</com:ReplyRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:9000/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.messaing">
<soapenv:Header/>
<soapenv:Body>
<ser:SendMessageRequest>
<ser:sender>username1</ser:sender>
<ser:receiver>username2</ser:receiver>
<ser:text>fbmskafmb</ser:text>
</ser:SendMessageRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:9000/ws
XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.messaing">
<soapenv:Header/>
<soapenv:Body>
<ser:GetChatLogRequest>
<ser:chatID>3</ser:chatID>
</ser:GetChatLogRequest>
</soapenv:Body>
</soapenv:Envelope>
Service URL: http://localhost:9000/ws XML Input :
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ser="http://service.messaing">
<soapenv:Header/>
<soapenv:Body>
<ser:GetListOfChatsRequest>
<ser:username>username1</ser:username>
</ser:GetListOfChatsRequest>
</soapenv:Body>
</soapenv:Envelope>
The User Service is running in the 8081 port, whose wsdl file is available at: http://localhost:8081/ws/user.wsdl
SoapUI Configuration File: User Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- have reasonably loose coupling
- is reusable
- is autonomous (doesnt have any dependencey)
- is stateless (each call is its own thing)
Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
The Post Service is running in the 8082 port, whose wsdl file is available at: http://localhost:8082/ws/post.wsdl
SoapUI Configuration File: Post Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- is reusable
- is autonomous (doesnt have any dependencey other than the utility service)
- is stateless (each call is its own thing)
The service was too central for it to have loose coupling. Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
The Comment Service is running in the 8083 port, whose wsdl file is available at: http://localhost:8083/ws/comment.wsdl
SoapUI Configuration File: Comment Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- is reusable
- have reasonably loose coupling
- is autonomous (doesnt have any dependencey other than the utility service)
- is stateless (each call is its own thing)
Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
The Messaging Service is running in the 9000 port, whose wsdl file is available at: http://localhost:9000/ws/messaging.wsdl
SoapUI Configuration File: Messaging Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- is reusable
- is completely decoupled
- is autonomous (doesnt have any dependencey at all)
- is stateless (each call is its own thing)
Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
The GenerateFeed Service is running in the 8084 port, whose wsdl file is available at: http://localhost:8084/ws/feed.wsdl
SoapUI Configuration File: Generate Feed Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- is stateless (each call is its own thing)
It isnt reusable due to being a task service and specific for a task. This is dependent on 2 entity services making it more coupled and less autonomous. Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
The GenerateProfile Service is running in the 8085 port, whose wsdl file is available at: http://localhost:8085/ws/profile.wsdl
SoapUI Configuration File: Profile Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- is stateless (each call is its own thing)
It isnt reusable due to being a task service and specific for a task. This is dependent on 2 entity services making it more coupled and less autonomous. Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
The OnePost Service is running in the 8086 port, whose wsdl file is available at: http://localhost:8086/ws/onepost.wsdl
SoapUI Configuration File: One Post Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- is stateless (each call is its own thing)
It isnt reusable due to being a task service and specific for a task. This is dependent on 2 entity services making it more coupled and less autonomous. Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
The StrikeCheck Service is running in the 8087 port, whose wsdl file is available at: http://localhost:8087/ws/strikecheck.wsdl
SoapUI Configuration File: Strike Checker Configuration
This service
- has a standardized Service Contract in form of this wsdl file
- is reusable
- is completely decoupled
- is autonomous (doesnt have any dependencey at all)
- is stateless (each call is its own thing)
Abstraction wasnt possible due to the project being too simplistic in nature. Discoverability was out of scope. composability wasnt implemented due to time constrains.
Principle | User | Post | Comment | Messageing | Feed | Profile | OnePost | StrikeChecker |
---|---|---|---|---|---|---|---|---|
Service Contract | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Loose Coupling | ✅ | ✅ | ✅ | ✅ | ||||
Abstraction | ||||||||
Reusability | ✅ | ✅ | ✅ | ✅ | ✅ | |||
Autonomy | ✅ | ✅ | ✅ | ✅ | ✅ | |||
Statelessness | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ | ✅ |
Dicoverability | ||||||||
Composability |