LeoJimenezG / Alura_ChallengeONE_Java_3

Oracle ONE Challenge: Forum-Hub, Java BackEnd APIRest using SpringBoot

Repository from Github https://github.comLeoJimenezG/Alura_ChallengeONE_Java_3Repository from Github https://github.comLeoJimenezG/Alura_ChallengeONE_Java_3

Alura_ChallengeONE_Java_3

Alura Challenge: Forum-Hub. Java BackEnd API REST

This API REST system simulates the functionality of a Forum using four main endpoints. It supports the GET, POST, PUT and DELETE http methods.


πŸ“˜ How does it work

  • Every endpoint capable of returning an object response, it will return the status code and a json.
  • The system uses PostgresSQL for the database.
  • The url before the endpoints can be adjusted according to the needs. (e.g., http:/anyserver/ENDPOINT).
  • The system has four main endpoints: /login, /topic, /author and /answer. Each one of them correspond to different aspects and will vary on the http methods allowed.

πŸ’» Main Endpoints

Endpoint("/login"):

  • The only http method it accepts is POST.

  • This endpoint does not require any kind of authorization, so anyone can access to it.

  • You need to send a Json with valid credentials in order to recive a JsonWebToken that will allow you to access all the other endpoints.

  • Example of the Json with credentials:

    image

  • If your credentials are valid you will recive your JWT and it will valid for two hours according to the UTC(-06:00).

    • Example of successful response:

      image

    • If your credentials are not valid you will recive a 403 status code.

  • Once you have recived your JWT, you will be able to access all the other endpoints.

Endpoint("/topic"):

  • This endpoint will accept GET, POST, PUT and DELETE http methods.

  • Only the active topics will be considered for this functions (status = true).

  • Method POST:

    • To register a new topic, you need to send a Json which can't have empty information.

    • Example of a valid Json:

      image

    • If the request is successful you will get a 201 status code, the created object and its location http:/server/topic/TOPIC_ID):

      image

    • If you try to register a topic with the same title and message that another topic, you will get a 400 status code.

  • Method GET:

    • Endpoint("/all"):

      • This endpoint will return a list of all the topics in a Json format.

      • Example of sucessful response:

        image

    • Endpoint("/firstTen"):

      • This endpoint will return a list of ten topics in ascending order according to their creation_date.
    • Endpoint("/title/{title}"):

      • This endpoint allowes you to search a topic by its exact title.

      • An example of a request is http:/server/topic/title/example-of-title.

      • If the topic is found, you will recive a Json object:

        image

      • If the topic is not found, you will get a 404 status code.

    • Endpoint("/author/{id}"):

      • This endpoint allowes you to search a topic by an author's id.

      • An example of a request is http:/server/topic/author/2.

      • If the author's id and topic is found, you will recive a list of topics in a Json format:

        image

      • If the author's id or topic is not found, you will get a 404 status code.

    • Endpoint("/course/{id}"):

      • This endpoint allowes you to search a topic by a course's id.

      • An example of a request is http:/server/topic/course/4.

      • If the course's id and topic is found, you will recive a list of topics in a Json format:

        image

      • If the course's id or topic is not found, you will get a 404 status code.

    • Endpoint("/{id}"):

      • This endpoint allowes you to search a topic by its id.

      • An example of a request is http:/server/topic/1.

      • If the topic is found, you will recive a Json object:

        image

      • If the topic is not found, you will get a 404 status code.

  • Method PUT:

    • Endpoint("/{id}"):
      • This endpoint allowes you to update a topic by its id.

      • Example of a valid Json to update a topic:

        image

      • You can omit any of the Json properties as this is only an update.

      • If the topic is found and the Json is valid, you will recive a Json of the updated object:

        image

      • If the topic is not found, you will get a 404 status code.

  • Method DELETE:

    • Endpoint("/{id}"):
      • This endpoint allowes you to delete a topic by its id.
      • If the topic is found, you will only get a 200 status code.
      • If the topic is not found, you will get a 404 status code.

Endpoint("/author"):

  • This endpoint will accept GET and PUT http methods.

  • Method GET:

    • Endpoint("/{id}"):

      • This endpoint allowes you to search an author by its id.

      • An example of a request is http:/server/author/1.

      • If the author is found, you will recive a Json object:

        image

      • If the author is not found, you will get a 404 status code.

    • Endpoint("/name/{name}"):

      • This endpoint allowes you to search an author by its exact name.

      • An example of a request is http:/server/author/name/Pedro-Hernandez.

      • If the author is found, you will recive a Json object:

        image

      • If the author is not found, you will get a 404 status code.

    • Endpoint("/email/{email}"):

      • This endpoint allowes you to search an author by its exact email.

      • An example of a request is http:/server/author/email/pedro123@gmail.com.

      • If the author is found, you will recive a Json object:

        image

      • If the author is not found, you will get a 404 status code.

  • Method PUT:

    • Endpoint("/{id}"):
      • This endpoint allowes you to update an author by its id.

      • Example of a valid Json to update an author:

        image

      • You can omit any of the Json properties as this is only an update.

      • If the author is found and the Json is valid, you will revice a Json of the updated object:

        image

      • If the author is not found, you will get a 404 status code.

Endpoint("/answer"):

  • This endpoint will accept GET, POST, PUT and DELETE http methods.
  • Method GET:

    • Endpoint("/{id}"):
      • This endpoint allowes you to search an answer by its id.

      • An example of a request is http:/server/answer/1.

      • If the answer is found, you will recive a Json object:

        image

      • If the answer is not found, you will get a 404 status code.

  • Method POST:

    • Endpoint("/add"):
      • This endpoint allowes you to add a new answer.

      • You need to send a Json which can't have empty information.

      • Example of a valid Json:

        image

      • If the request is successful you will get a 201 status code, the created object and its location http:/server/answer/ANSWER_ID:

        image

      • If your request is missing something or it is not correct, you will get a 400 status code.

  • Method PUT:

    • Endpoint("/{id}"):
      • This endpoint allowes you to update an answer by its id.

      • Example of a valid Json to update an answer:

        image

      • You can omit any of the Json properties as this is only an update.

      • If the answer is found and the Json is valid, you will revice a Json of the updated object:

        image

      • If the answer is not found, you will get a 404 status code.

  • Method DELETE:

    • Endpoint("/{id}"):
      • This endpoint allowes you to delete an answer by its id.
      • If the answer is found, you will only get a 200 status code.
      • If the answer is not found, you will get a 404 status code.

πŸ” Security Considerations

  • The API uses JWT (JSON Web Token) for authentication and authorization.
  • The token must be included in the Authorization header for all requests except the /login endpoint.
  • Ensure secure storage of tokens on the client side.

πŸ“š Useful Resources

About

Oracle ONE Challenge: Forum-Hub, Java BackEnd APIRest using SpringBoot


Languages

Language:Java 100.0%