0% found this document useful (0 votes)
102 views

RESTAPI Notes

Spring Boot REST API Notes for Beginners

Uploaded by

projjwalxroy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
102 views

RESTAPI Notes

Spring Boot REST API Notes for Beginners

Uploaded by

projjwalxroy
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as TXT, PDF, TXT or read online on Scribd
You are on page 1/ 10

============

Webservices
============

-> It is a distributed technology which is used to develop distributed application.

-> If one application is communicating with another application then those apps are
called as distributed applications.

-> Distributed applications should have intereoperability

-> Intereoperability means language independent & platform independent.

java app <--------> python app

java app <--------> dot net app

java app <---------> php app

java app <---------> Angular app

java app <---------> React app

Note: Distributed applications are used for code reusability

(Business to business communication)

=> Distributed applications can be developed in 2 ways

1) SOAP Webservices (Outdated)

2) RESTFul Services (trending)

====================
What is REST API ?
=====================

Distributed App = rest api / restful service / restful webservice/microservice

=> REST API means an application which provides business logic to other
applications through internet.

======================
REST API Architecture
=======================

1) Provider / Resource

2) Consumer / Client

=> Provider means the application which is providing business services to other
applications.

=> Consumer means the application which is accessing business services from other
applications.
Ex: MakeMyTrip & IRCTC

Note: We will use JSON to exchange data between provider & consumer.

=====
Task
=====

1) What is HTTP
2) HTTP methods & Purpose of those methods
3) Http Status Codes

=================
What is HTTP
=================

=> HTTP stands for Hyper Text Transfer Protocol

=> HTTP acts as mediator between Client & Server

=> HTTP is stateless protocol

=> We need to know about

1) Http Request

2) Http Response

3) Http Methods

4) Http Status Codes

========================
HTTP Request Structure
========================

=> It contains below parts

a) Request Line (Http Method + URL)


b) Request Headers (Metadata) (K-V)
c) Request Body (Payload - text/xml/json)

=============================
HTTP Response Structure
=============================

=> It contains below parts

a) Response Line (Status Code + Status MSG)


b) Response headers (Metadata - K & V)
c) Response body (Payload - text/xml/json)

==============
HTTP Methods
==============

GET ---> It is used to get the data (no request body)


POST ---> Send data (create record)

PUT ---> Update record (complete update)

PATCH ---> Partial Update

DELETE ---> Delete Record

===================
HTTP Status Codes
===================

1xx (100-199) : Informational

2xx (200-299) : Success

3xx (300-399) : Redirectional

4xx (400-499) : Client Error

5xx (500-599) : Server Error

404 - Resource Not Found

500 - Internal Server Error

200 - OK

=======================================
Developing REST APIs using Spring Boot
=======================================

=> We will use 'spring-boot-starter-web' dependency

=> As part of REST API development we need to learn both

1) Provider Development
2) Consumer Development

=> We will use below annotations as part of Provider development

@RestController (@Controller + @ResponseBody)

@GetMapping
@PostMapping
@PutMapping
@PatchMapping
@DeleteMapping

@RequestParam
@PathVariable

@RequestBody

=> We have below 3 options to develop Consumer

1) RestTemplate --- sync


2) WebClient (webflux) --- sync & async
3) FeignClient (spring cloud)

Note : We will use POSTMAN to test provider functionality.

Note: We will use Swagger to generate provider documentation.

=================
HTTP GET Request
=================

=> GET request is used to get data from Server/Provider.

=> GET request will not contain request body.

=> If we want to send data in GET request then we need to use

1) Query Parameters
2) Path Parameters

Ex-1 : http://localhost:8081/welcome?name=raju

Ex-2: : http://localhost:8081/greet/john

=> Query Parameters we can read using @RequestParam annotation

=> Path Parameters we can read using @PathVariable annotation.

===================================================================
@RestController
public class DemoRestController {

@GetMapping(value = "/msg", produces = "text/plain")


public ResponseEntity<String> getMsg() {
String msg = "Welcome to Ashok IT";
return new ResponseEntity<>(msg, HttpStatus.OK);
}

@GetMapping("/greet/{name}")
public String getGreetMsg(@PathVariable("name") String name) {
String msg = name + ", Good Morning..!!";
return msg;
}

@GetMapping("/welcome")
public String getWelcomeMsg( ") String name) {
String msg = name + ", Welcome to REST API";
return msg;
}
}
=============================================================================
@RestController
public class CustomerRestController {

@GetMapping(value = "/customers", produces = "application/json")


public ResponseEntity<List<Customer>> getCustomers() {
Customer c1 = new Customer(1, "John", "[email protected]");
Customer c2 = new Customer(2, "Smith", "[email protected]");
Customer c3 = new Customer(3, "David", "[email protected]");
List<Customer> list = Arrays.asList(c1, c2, c3);
return new ResponseEntity<>(list, HttpStatus.OK);
}

@GetMapping(value = "/customer", produces = "application/json")


public ResponseEntity<Customer> getCustomer() {
Customer c = new Customer(1, "John", "[email protected]");
return new ResponseEntity<>(c, HttpStatus.OK);
}
}
=============================================================

==================
HTTP Post Request
==================

=> POST method is used for creating new resource/record

=> POST method contains request body

==================
HTTP PUT Request
==================

=> PUT method is used for updating resource/record

=> PUT method contains request body

==================
HTTP DELETE Request
==================

=> DELETE method is used for deleting resource/record

=> DELETE method contains request body

produces : Represents rest api method response body data format

consumes : Represents rest api method request body data format

@RequestParam : To read query params from url

@PathVariable : To read path params from URL

@RequestBody : To read data from http req body (payload)

==================
What is Swagger ?
==================

=> Swagger is used to generate documentation for REST API

=> Using Swagger we can test rest api.

=> Add below dependency in pom.xml file


<dependency>
<groupId>org.springdoc</groupId>
<artifactId>springdoc-openapi-starter-webmvc-ui</artifactId>
<version>2.5.0</version>
</dependency>

=> After running the application use below url to access swaager-documentation

URL : http://localhost:8081/swagger-ui/index.html/

========================================================================
Assignment -1 : Develop Spring Boot REST API to perform Crud operations with
Database table using Spring Data jpa and test it using Swagger documentation.

@@ Referenece Video : https://www.youtube.com/watch?v=_rOUDhCE-x4


=========================================================================

Assignment - 2 : Develop Ticket Booking Rest api (IRCTC api) with below operations.
Use H2 DB for saving data.

operation-1 : book-ticket
operation-2 : get-ticket using ticket-id
operation-3 : get-all-tickets

input : passenger-data
- name
- dob
- gender
- doj
- from
- to
- trainNum

output : ticket-data
- ticketId
- ticketStatus
- trainNum
- from
- to
- doj
- name

----------------------------------------------------------------------------

===================
What is xml ?
===================

-> XML stands for extensible markup language

-> xml is free and open source

-> xml govenred by w3c org

-> xml represents data in the form of elements

-> XML is intereoperable (language independent)


-> XML is used to represent the data

----------
syntax:
----------

<person>
<id>101</id>
<name>Ashok</name>
</person>

-> We have 2 types of elements in xml

1) simple element (contains data directley)

2) compound element (contains child elements)

============================================
Dealing with xml data in java applications
============================================

=> Upto java 8v we have JAX-B api in jdk to deal with xml files in java.

=> Using JAX-B api we can convert java object to xml and vice versa.

jax-b
java obj <---------> xml data

Note: From java 9 onwards jax-b api is not part of JDK software.

=> If we want to deal with xml data in java applications, we need to add dependency

Marshalling : Converting java object to xml data

Un-Marshalling : Converting xml data to java object

=> To deal with xml data in spring boot rest api we need to add below dependency in
pom.xml file

<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>
</dependency>

=> Below is the rest controller method which supports both xml and json response

@RestController
public class ProductRestController {

@GetMapping(
value = "/product",
produces = {"application/xml" , "application/json"}
)
public ResponseEntity<Product> getProduct() {
Product p = new Product(101, "Monitor", 1000.00);
return new ResponseEntity<>(p, HttpStatus.OK);
}
}

Note: The above method returning Object that means it is loosely coupled with xml
and json formats.

=> Consumer can decide in which format they want response.

=> Consumer should send Accept header in the request to decide response format.

Accept = appliction/json

Accept = application/xml

Note: Based on the Accept header value given by consumer response will be sent from
the provider.

===============================
what is Content-Type header ?
===============================

=> It is used to represent in which format consumer sending request body data to
provider.

@PostMapping(
value="/product",
consumes = {"application/xml", "application/json"},
produces = "text/plain"
)
public ResponseEntity<String> addProduct(@RequestBody Product p){
System.out.println(p);
//logic
return new ResponseEntity<String>("product added", HttpStatus.CREATED);
}

-------------------------------------------------------------

=> Http Headers

Accept : In which format client expecting response body


Content-Type : In which format client giving request body

=> Media Types

consumes : In which format provider expecting input


produces : In which format provider can give output

=============================================================

1) What is Distributed Application & Why ?

2) What is Intereoperability

3) JSON & Jackson


4) XML & JAX-B (outdated)

5) HTTP Protocol (mediator)

6) HTTP Methods (GET, POST, PUT, PATCH, DELETE)

7) HTTP Status Codes

8) HTTP Request Structure

- Request Line (Method + URL)


- Request Headers (Accept, Content-Type)
- Request Body (payload - txt/json/xml)

9) HTTP Response Structure

- Response Line (Status Code + MSG)


- Response Headers (meta data)
- Response Body (payload - txt/json/xml)

10) REST API Architecture

- Provider
- Consumer

11) @RestController

12) ResponseEntity

13) @RequestParam (Query Params)

14) @PathVariable (Path params)

15) @RequestBody

16) Consumes & Produces (Media Types)

17) Accept & Content-Type headers

18) POSTMAN

19) Swagger

20) IRCTC API

21) CRUD Operations using REST API with Data JPA

=========
Consumer
==========

=> The application which is accessing other applications is called as Consumer


application.

=> Using Spring Boot we can develop Consumer in 3 ways

1) RestTemplate (outdated)
2) WebClient

3) FeignClient

=> RestTemplate supports only Synchronus communication

=> WebClient supports both sync & async communication (spring 5.x)

=> Feign Client is used for inter service communication in Microservices


===================================
What is Synchronus Communication ?
===================================

=> After sending request to provider if consumer is waiting for the response then
it is called as Synchronus communication.

===================================
What is Asynchronus Communication ?
===================================

=> After sending request to provider if consumer is not waiting for the response
then it is called as asynchronus communication.

You might also like