The purpose of this exercise is to test your familiarity with Java/Kotlin full-stack development. You'll be building a small book listing app using frameworks of your choice and the Goodreads' public API.
-
The client app will accept the following command line arguments:
- --help Output a usage message and exit
- -s, --search TERMS Search the Goodreads' API and display the results on screen.
- Results must include author, title, and a link or display of the image of the book
- --sort FIELD where field is one of "author" or "title"
- Sorts the results by the specified field, if no sort is specified, title is the default
- -p NUMBER if you choose to implement pagination, display the NUMBER page of results
- -h, --host HOSTNAME the hostname or ip address where the server can be found, should default to 127.0.0.1
-
There should be a server component as well. The server component should provide REST endpoints that the client communicates with. The client should not directly contact the Goodreads API.
-
The server should listen on a non-restricted port and the client should connect to that port.
- The application must be written in Java or Kotlin
- You may use any Java/Kotlin frameworks / libraries that you see fit
- Errors that occur during processing should be logged and the user should be presented with a message asking them to retry.
- Security measures, including user authentication / authorization
- Unit testing
- UX, as long as the application is usable. As this is just an exercise the UX can be command-line only or use a console or GUI framework of your choice
- Logging, with the exception of errors
- https://www.goodreads.com/api/index#search.books
- The Goodreads search API returns XML. Transform the XML into JSON and only send what your app will need
- Be sure to document your code, especially cases where you might have made a different choice in a 'real' application_
- Upon completion, be sure that your code is accessible through a git repo, and provide the link to that repo to Dotdash
- Include pagination in the UI.