📺 Develpreneur YouTube Episode

Video + transcript

Rest Assured and Karate - Part 2

2022-03-08 •Youtube

Detailed Notes

Our journey into Restful API Testing Using RestAssured begins by looking at the different ways in which API testing can be done. Next, we look at how to use tools such as the browser developer tool, Swagger, and Postman to test APIs from a browser. Additionally, we look at how to use libraries like RestAssued and Karate to build continuous integration tests for our code projects. Finally, we wrap up our discussion by showing you how to write RestAssured tests against a real-world scenario.

Restful API Testing Using RestAssured Overview:

Overview of Restful API Different Types of HTTP Requests How to Manually Test a Restful API Use Postman and Swagger Write RestAssured Unit Test What is Restful API

REST APIs provide a flexible, lightweight way to integrate applications, and have emerged as the most common method for connecting components in microservices architectures.

-IBM

HTTP Requests

Get - Requests a representation of the specified resource. Requests using GET should only retrieve data. Post -Submits an entity to the specified resource, often causing a change in state or side effects on the server. Put - Replaces all current representations of the target resource with the request payload. Delete - Deletes the specified resource. - Mozilla

RestAssured

REST Assured is a Java DSL for simplifying testing of REST-based services built on top of HTTP Builder. It supports POST, GET, PUT, DELETE, OPTIONS, PATCH, and HEAD requests and can be used to validate and verify the response of these requests.

- RestAssured

Start with a real-world example

To explain the principles of API testing we decided to begin with a real-world exercise and build out our test cases to support the following scenario. For instance, a company that wants to set up a Tutorial center at a university to help students study. Initially, they build a WS application that records the subjects that will be covered.

The current interface supports:

Create A Tutorial Retrieve All Tutorials Retrieve A Tutorial By Id Update A Tutorials By Id Find All Published Tutorials Find By Title Containing String Delete A Tutorial Delete All Tutorials

Restful API Testing Using RestAssured

Additional Resources

RestAssured Karate Postman Swagger Finally, this series comes from our mentoring/mastermind classes. These classes are virtual meetings that focus on how to improve our technical skills and build our businesses. After all the goals of each member vary. However, this diversity makes for great discussions and a ton of educational value every time we meet. We hope you enjoy viewing this series as much as we enjoy creating it. As always, this may not be all new to you, but we hope it helps you be a better developer.

Transcript Text
[Music]
now if we do this side by side
you see we have
two deletes
we have three gets
we have our
post and our put
now with swagger this is really cool
so if you have swagger installed in your
web service application
not only does it give you a definitions
page to where you can come in and
actually look and see how the api works
which eliminates the need to really
go back and know what the code does
because in most web service integrations
you're going to be provided
this api definition but not the actual
source code so you really don't know
what's going on behind the scenes what
type of technologies they have running
if it's
you know c sharp java php python
you have no idea
but what you do have is a definition and
you know that using the http request
methods you can actually call this api
from
your application you can call it from
whatever language you want to call it
from
you could also call it from web services
a standalone application or even a
mobile application
so with swagger
it defines our apis for us but what
swiger also gives us is it gives us the
capability to test our apis directly
from this interface for instance if i
come down here to
our get api tutorials
if i expand this out
it gives us the definitions we need to
interface with tutorials so here we see
we can pass a parameter title
and we should get back a response of
200.
we will also get back some type of json
so it gives us our example
output here
but what's really cool is if this output
ties to like a dto an entity being or
some type of object
you can click the schema
then you can actually see what this json
structure looked like so it's going to
be a list of tutorials
and our tutorial contains our id our
title our description and publish
so now you know what type of pojo to
build on your side if you want to map
this json object using something like
jackson or a json map
so you don't have to actually work
directly with the json you could
actually work with an actual object
the other cool thing about swagger is
you can actually test directly from
swagger
so i can hit try out
and since title is optional we can just
click the execute button
and this basically acts like a waveform
so we just called we just did a get call
to localhost 880 api tutorials
and we also passed in the parameter to
accept any type of response
here is our request url
so for testing purposes this is the url
we want to test with
and here is the output so we see we got
our two records we got our calculus math
true
and we got our second record how to
introduce testing into the development
life cycle our description and false
you can also download this and it also
gives you the response headers
so for testing purposes you want to make
sure if you have to pass any data
in a specific form
json
or html or xml you in your request
header may have to pass a different
context type
so if we were to take this
and open up say postman
we could do this exact same test from
within postman
so in postman if i just create a new
request
paste in my url
i do a get
my headers don't need any specific
headers or parameters authorizations or
body
and i just click send
and as you can see we get the same
output
now what's neat with postman is if we go
to our console
if we expand out on the console we also
see that we get the exact same
information that we can get from within
swagger so we have a request header
response header
response body
with our json if we had any request
contacts we could pass that as well and
it gives us some additional network
information
the reason i'm showing you both cases is
because from rest assured in karate we
get the same information we can parse
this we can test this we can build this
all this is provided within those
libraries
all right so let's go out to our test
case
so in order to use rest assured
it's actually pretty simple so once you
have the library installed you just
simply start typing
rest
assured
dot
and now we have a whole bunch of
different configuration methods that we
can work with
so for testing purposes we
want to uh so it's actually rest assured
is actually kind of built using the
behavior
like
syntax of given then assert
body
you have response you have status code
so basically most of the
typical behavior driven
testing given when then
is how you define
your rest assured calls
and what's interesting is rest assured
uses their chaining method approach
to apply everything in one single line
so you can actually do
everything in one call so we can do rest
assured dot given
returns us a request specification
so we need to given we can pass
parameters we can pass in headers
so we'll start with given
and we'll kind of break this out so it's
easy to read so we got given
now
for our test purposes for this example
i also want to implement the log feature
so if i use the log method
it will get the request log
specifications
and i can specify the type of logging i
want to write out to the console
so you can actually write out the
cookies you can write out
for testing many different components of
the request header or of the request
itself
i'm just going to use all so we can kind
of see everything that comes back
so we have that
next
we need to have our uri
so what i need to do here is i need to
call the method
base
uri
and this provides the host information
for our api call
now since we're using one particular api
for everything we can define
a public
static
string
and we can just use uri
and we can set it equal
to http
localhost
88
so we'll take our uri
and we will drop it into our base uri
here
so now all of our calls will use the
base http localhost 8080.
what's interesting about using this
approach is you can define environment
variables
you could create an environment json
over here
and inside your test you could pass in
the environment variables be it qa dev
prod and then go read that json value
from the host from your resource
versus hard coding this into your
application
so now we get away from that test driven
development and behavior driven
development and get more into that
hybrid approach using data driven
development
so we have base uri
and we know
the context
text type
so the first one we're actually going to
do is we're going to create the tutorial
so this is actually
actually let me jump ahead a little bit
so let's actually retrieve all tutorials
let's actually do the second one first
only reason i want to do the second one
first is because it's a very simple call
all right so if we do the second one
which is retrieve all tutorials
and we'll code it
so in here we're going to do that get
call so we need to call the base url we
don't need the context type in this case
because it's just a simple get call
so we have given we're setting our logs
we're setting our host
now we're going to do when
so given our url
when
we get
so now under when you can do when
accept body
cookies
delete
so under when is where we set all of our
headers our form parameters and we set
the specific
http request type so in this case we're
going to do get
and we need to specify the api
so now api
all right so now we have our given
and our when
now we need to follow that up with then
so given
our host given some setup when we want
to get a api
maybe pass in some parameters some
context set some headers
then what do we do when it comes back
so then
we can log
our response
so we again we have our log so that
under given we're logging the request
under then we're logging the response
log all
so if i leave it here this will run it
will retrieve the json and just write it
to the logs
however i kind of wanted to add one
additional step here
because we know
from swagger
when we call this guy when we call this
get or api tutorials we are supposed to
get a response code of 200.
so what we can do here in our then
we can then say
status code
and we can tell it what to expect
200. so if we do not get 200 this step
should fail
so if i save this
all right so we have our spring boot
test we have our test method order
and we have our second test
to retrieve all tutorials
so to run this all we have to do is go
to our class
over here on the left or within the code
right click
run as
junit test
and in our console here it will start a
spring boot
microservice for our test case
and in our window
in our junit window it called rest
assured demo application test
and it called retrieve all tutorials
and it passed
so let's go look at the actual log and
see what we got in the console so in our
console here
it started our boot
it deployed our test
it ran our test
so it reset spring boot it defined our
calculus
and our books
so then we ran our test so our request
method was get
our request uri was localhost api
tutorials we set no proxy we had no
request parameters no query form or path
parameters
our header was accept all
we had no cookies multi-part or body
we use http 1
to receive 200
and the response came back as json
and we
wrote the json that came back
ironically enough this looks identical
to what we see in both postman
and
in or in swagger and
in postman
so real simple real clean real easy to
follow so if you're already using java
rest assured really does seem to be the
way to go it's real clean real
straightforward
right so that's just retrieving the
tutorials pretty easy pretty
straightforward we have a given base uri
when we get something then
check the status code
now what's cool about this is if you
look at this last part here so if you do
rest assured
given
and then you follow all the way down to
then
it returns a valid response
so this guy actually returns
a response
and it will be an io rest assured
response class
there we go
so this returns the response and then
from your response
object you can do
return you can do pretty print
you can get the status code so you can
now do everything that you can also do
here with the chaining of methods
what's nice about this is this gives you
the ability to expand upon the
validation that you can't do with
chaining so you could do something like
get body
dot as pretty string
and you can print that out
or you could take this and map this to
an object
and we'll get to that in just a minute
so for now let's just put this back
all right so let's go back up to our
first test
and now let's try to create the object
so when we do the create
let's go look at swagger
so let's look at creating a tutorial so
to create a tutorial we need to do the
post request here
and here
in swagger it tells us oh okay a request
has no parameters
but it requires a request body of
application json
with the schema
of our tutorial so we have to pass it in
a
id titled description and publish
now since we're in our actual
application
this makes it simple because we can just
reuse our entity
now here the response will also come
back as just the tutorial so it will
show that it was created
all right so let's go look at how we do
this
so we have rest assured we have given we
have base uri but we need to set the
context type in this section here to
match what we saw in swagger
so here our contact site needs to be
application json
okay application json so this matches
what we have in swagger
and we need to pass in a body so now we
have our body
and we need to give it an object now
this object
from looking over here
needs to be
a tutorial object so we need to pass in
a tutorial json
well since we know the schema and we're
already in our boot application we can
just cheat and reuse tutorial
so here we can do new
tutorial
and we can use the constructor of
tutorial to set the title description
and if it was published
the detector's guide to the galaxy
space travel
and it is published
so we have set our context type to
application json
we're setting our body we're using new
tutorial
and this will create our entity beam and
it will also set it to json when it
passes it up it'll convert our object to
json
really clean really straightforward code
is not cluttered
all right so we have our body
so we've essentially now set up in the
given everything we need to do
to submit the information we need to the
call so next we do then
or i'm sorry when
so given
all of our
setup
when
now in here let's look at swagger again
so we see here this has to be a post
request
so now we're going to do post
and our post needs to be
the api tutorials so we come back over
here so we see post here is our post api
so api tutorials
we now have our header
we have our when
and we are doing a post
then
let's log
what we get back
let's log everything
and again let's check for status
of 200
which if we look at swagger that's what
we should get from our post
so post our parameters parameters in the
body
and our response should be 200 and we
should get back
our json object with our record id
so let me save this
and we will rerun this
you
Transcript Segments
0.48

[Music]

26.32

now if we do this side by side

29.199

you see we have

31.039

two deletes

33.04

we have three gets

36.64

we have our

38.239

post and our put

41.2

now with swagger this is really cool

44.399

so if you have swagger installed in your

47.36

web service application

49.2

not only does it give you a definitions

51.36

page to where you can come in and

52.879

actually look and see how the api works

55.84

which eliminates the need to really

58.64

go back and know what the code does

60.879

because in most web service integrations

64.4

you're going to be provided

66.479

this api definition but not the actual

69.6

source code so you really don't know

71.2

what's going on behind the scenes what

73.439

type of technologies they have running

75.2

if it's

76.24

you know c sharp java php python

80.24

you have no idea

81.6

but what you do have is a definition and

84.72

you know that using the http request

87.28

methods you can actually call this api

91.119

from

92.159

your application you can call it from

93.84

whatever language you want to call it

95.52

from

96.479

you could also call it from web services

98.4

a standalone application or even a

100.72

mobile application

102.64

so with swagger

104.24

it defines our apis for us but what

107.759

swiger also gives us is it gives us the

110.88

capability to test our apis directly

114.56

from this interface for instance if i

117.68

come down here to

119.6

our get api tutorials

122.479

if i expand this out

124.719

it gives us the definitions we need to

127.759

interface with tutorials so here we see

131.12

we can pass a parameter title

134.8

and we should get back a response of

137.04

200.

138.56

we will also get back some type of json

142.08

so it gives us our example

144.16

output here

145.36

but what's really cool is if this output

148

ties to like a dto an entity being or

150.959

some type of object

152.64

you can click the schema

156

then you can actually see what this json

158.4

structure looked like so it's going to

160.48

be a list of tutorials

163.599

and our tutorial contains our id our

165.92

title our description and publish

168.64

so now you know what type of pojo to

171.2

build on your side if you want to map

173.519

this json object using something like

176.08

jackson or a json map

178.48

so you don't have to actually work

180.239

directly with the json you could

182.8

actually work with an actual object

185.84

the other cool thing about swagger is

187.84

you can actually test directly from

189.84

swagger

191.28

so i can hit try out

193.68

and since title is optional we can just

196.56

click the execute button

198.4

and this basically acts like a waveform

201.04

so we just called we just did a get call

205.2

to localhost 880 api tutorials

209.599

and we also passed in the parameter to

212.159

accept any type of response

215.44

here is our request url

217.92

so for testing purposes this is the url

220.239

we want to test with

222.159

and here is the output so we see we got

225.04

our two records we got our calculus math

228.08

true

229.04

and we got our second record how to

231.12

introduce testing into the development

233.04

life cycle our description and false

237.92

you can also download this and it also

240.72

gives you the response headers

243.36

so for testing purposes you want to make

245.599

sure if you have to pass any data

248.239

in a specific form

250.319

json

251.36

or html or xml you in your request

255.84

header may have to pass a different

258.56

context type

261.44

so if we were to take this

264.88

and open up say postman

268.08

we could do this exact same test from

270.88

within postman

272.96

so in postman if i just create a new

275.84

request

277.84

paste in my url

279.6

i do a get

281.6

my headers don't need any specific

283.759

headers or parameters authorizations or

286.479

body

288

and i just click send

290.4

and as you can see we get the same

292.72

output

293.84

now what's neat with postman is if we go

296.16

to our console

298.24

if we expand out on the console we also

301.199

see that we get the exact same

302.88

information that we can get from within

304.72

swagger so we have a request header

307.759

response header

309.36

response body

311.44

with our json if we had any request

314.639

contacts we could pass that as well and

317.12

it gives us some additional network

319.28

information

320.96

the reason i'm showing you both cases is

323.68

because from rest assured in karate we

327.28

get the same information we can parse

330

this we can test this we can build this

332.4

all this is provided within those

334.08

libraries

335.84

all right so let's go out to our test

338.72

case

340.479

so in order to use rest assured

343.68

it's actually pretty simple so once you

346.4

have the library installed you just

348.639

simply start typing

350.32

rest

351.44

assured

353.44

dot

354.88

and now we have a whole bunch of

357.36

different configuration methods that we

359.12

can work with

360.4

so for testing purposes we

363.52

want to uh so it's actually rest assured

366.96

is actually kind of built using the

369.919

behavior

371.28

like

372.319

syntax of given then assert

376

body

377.28

you have response you have status code

379.84

so basically most of the

382.08

typical behavior driven

384.16

testing given when then

386.72

is how you define

388.8

your rest assured calls

391.36

and what's interesting is rest assured

393.44

uses their chaining method approach

396.72

to apply everything in one single line

399.36

so you can actually do

400.72

everything in one call so we can do rest

404

assured dot given

406.319

returns us a request specification

409.84

so we need to given we can pass

411.44

parameters we can pass in headers

413.919

so we'll start with given

417.599

and we'll kind of break this out so it's

420.4

easy to read so we got given

424.56

now

425.44

for our test purposes for this example

429.759

i also want to implement the log feature

433.28

so if i use the log method

435.44

it will get the request log

436.84

specifications

438.72

and i can specify the type of logging i

442.319

want to write out to the console

444.96

so you can actually write out the

446.319

cookies you can write out

448.24

for testing many different components of

451.36

the request header or of the request

453.759

itself

454.8

i'm just going to use all so we can kind

456.88

of see everything that comes back

459.919

so we have that

461.199

next

462.72

we need to have our uri

465.199

so what i need to do here is i need to

468.639

call the method

470.56

base

471.84

uri

473.759

and this provides the host information

476.639

for our api call

478.879

now since we're using one particular api

482

for everything we can define

485.599

a public

487.199

static

489.36

string

492.16

and we can just use uri

498.08

and we can set it equal

502

to http

505.52

localhost

507.599

88

511.039

so we'll take our uri

513.279

and we will drop it into our base uri

515.599

here

517.039

so now all of our calls will use the

519.36

base http localhost 8080.

523.12

what's interesting about using this

524.64

approach is you can define environment

527.44

variables

529.36

you could create an environment json

531.2

over here

532.32

and inside your test you could pass in

535.6

the environment variables be it qa dev

538.16

prod and then go read that json value

542

from the host from your resource

545.68

versus hard coding this into your

547.44

application

548.399

so now we get away from that test driven

551.12

development and behavior driven

552.8

development and get more into that

554.24

hybrid approach using data driven

556.399

development

558

so we have base uri

560.48

and we know

562.64

the context

565.519

text type

567.839

so the first one we're actually going to

569.68

do is we're going to create the tutorial

572.08

so this is actually

575.44

actually let me jump ahead a little bit

577.76

so let's actually retrieve all tutorials

580

let's actually do the second one first

583.519

only reason i want to do the second one

585.519

first is because it's a very simple call

591.92

all right so if we do the second one

595.92

which is retrieve all tutorials

599.36

and we'll code it

601.839

so in here we're going to do that get

604.16

call so we need to call the base url we

607.04

don't need the context type in this case

609.36

because it's just a simple get call

614.24

so we have given we're setting our logs

617.2

we're setting our host

619.2

now we're going to do when

622.16

so given our url

625.279

when

627.12

we get

628.24

so now under when you can do when

631.279

accept body

634

cookies

635.279

delete

636.88

so under when is where we set all of our

639.36

headers our form parameters and we set

642.8

the specific

644.839

http request type so in this case we're

647.839

going to do get

649.12

and we need to specify the api

653.44

so now api

655.839

all right so now we have our given

657.76

and our when

659.2

now we need to follow that up with then

662.56

so given

664.399

our host given some setup when we want

668.16

to get a api

671.279

maybe pass in some parameters some

672.8

context set some headers

674.48

then what do we do when it comes back

677.519

so then

679.2

we can log

680.88

our response

682.399

so we again we have our log so that

684.72

under given we're logging the request

687.12

under then we're logging the response

691.12

log all

693.12

so if i leave it here this will run it

696.399

will retrieve the json and just write it

698.56

to the logs

700.64

however i kind of wanted to add one

703.44

additional step here

705.04

because we know

706.72

from swagger

708.64

when we call this guy when we call this

711.76

get or api tutorials we are supposed to

714.72

get a response code of 200.

718.959

so what we can do here in our then

721.68

we can then say

724

status code

725.839

and we can tell it what to expect

728.639

200. so if we do not get 200 this step

733.04

should fail

734.639

so if i save this

737.44

all right so we have our spring boot

738.959

test we have our test method order

741.839

and we have our second test

744.56

to retrieve all tutorials

748.24

so to run this all we have to do is go

751.44

to our class

753.12

over here on the left or within the code

755.92

right click

757.6

run as

758.88

junit test

760.959

and in our console here it will start a

763.6

spring boot

765.279

microservice for our test case

768.639

and in our window

771.279

in our junit window it called rest

773.839

assured demo application test

777.04

and it called retrieve all tutorials

779.68

and it passed

781.44

so let's go look at the actual log and

783.68

see what we got in the console so in our

786.72

console here

788.399

it started our boot

790.8

it deployed our test

793.12

it ran our test

796.079

so it reset spring boot it defined our

799.36

calculus

800.8

and our books

803.68

so then we ran our test so our request

806.079

method was get

807.76

our request uri was localhost api

811.12

tutorials we set no proxy we had no

814.32

request parameters no query form or path

817.92

parameters

819.36

our header was accept all

821.279

we had no cookies multi-part or body

824.399

we use http 1

826.48

to receive 200

828.48

and the response came back as json

831.6

and we

832.56

wrote the json that came back

835.519

ironically enough this looks identical

838.399

to what we see in both postman

842.56

and

843.519

in or in swagger and

846.399

in postman

851.12

so real simple real clean real easy to

854.079

follow so if you're already using java

856.72

rest assured really does seem to be the

858.48

way to go it's real clean real

860.639

straightforward

863.04

right so that's just retrieving the

864.48

tutorials pretty easy pretty

866.639

straightforward we have a given base uri

869.6

when we get something then

872.56

check the status code

875.6

now what's cool about this is if you

878.16

look at this last part here so if you do

881.279

rest assured

882.639

given

884.959

and then you follow all the way down to

886.88

then

888.56

it returns a valid response

891.12

so this guy actually returns

894.16

a response

896.56

and it will be an io rest assured

898.72

response class

902.959

there we go

904.079

so this returns the response and then

906.48

from your response

909.12

object you can do

912.959

return you can do pretty print

916.48

you can get the status code so you can

918.639

now do everything that you can also do

921.12

here with the chaining of methods

923.44

what's nice about this is this gives you

925.36

the ability to expand upon the

928

validation that you can't do with

930.24

chaining so you could do something like

932.72

get body

934.56

dot as pretty string

939.199

and you can print that out

940.959

or you could take this and map this to

943.199

an object

945.04

and we'll get to that in just a minute

946.56

so for now let's just put this back

952.079

all right so let's go back up to our

953.36

first test

956.639

and now let's try to create the object

959.12

so when we do the create

961.279

let's go look at swagger

963.519

so let's look at creating a tutorial so

966.959

to create a tutorial we need to do the

969.04

post request here

971.279

and here

973.04

in swagger it tells us oh okay a request

976.32

has no parameters

978.24

but it requires a request body of

981.04

application json

983.199

with the schema

984.72

of our tutorial so we have to pass it in

987.759

a

988.48

id titled description and publish

992.079

now since we're in our actual

994.24

application

995.6

this makes it simple because we can just

997.839

reuse our entity

1001.839

now here the response will also come

1004

back as just the tutorial so it will

1006.72

show that it was created

1009.12

all right so let's go look at how we do

1011.68

this

1012.48

so we have rest assured we have given we

1015.36

have base uri but we need to set the

1017.68

context type in this section here to

1020.88

match what we saw in swagger

1022.959

so here our contact site needs to be

1025.28

application json

1027.439

okay application json so this matches

1029.919

what we have in swagger

1033.52

and we need to pass in a body so now we

1037.199

have our body

1040.64

and we need to give it an object now

1043.199

this object

1044.959

from looking over here

1047.28

needs to be

1048.48

a tutorial object so we need to pass in

1051.12

a tutorial json

1054.799

well since we know the schema and we're

1057.039

already in our boot application we can

1059.679

just cheat and reuse tutorial

1063.12

so here we can do new

1066.4

tutorial

1070.64

and we can use the constructor of

1072.64

tutorial to set the title description

1074.88

and if it was published

1078.08

the detector's guide to the galaxy

1081.36

space travel

1085.2

and it is published

1088.72

so we have set our context type to

1090.72

application json

1092.48

we're setting our body we're using new

1095.12

tutorial

1096.48

and this will create our entity beam and

1099.44

it will also set it to json when it

1102.08

passes it up it'll convert our object to

1104.559

json

1106.96

really clean really straightforward code

1109.44

is not cluttered

1112.48

all right so we have our body

1114.48

so we've essentially now set up in the

1117.2

given everything we need to do

1119.52

to submit the information we need to the

1123.039

call so next we do then

1125.84

or i'm sorry when

1128.4

so given

1129.84

all of our

1130.96

setup

1132.4

when

1134.72

now in here let's look at swagger again

1138.08

so we see here this has to be a post

1140.48

request

1141.76

so now we're going to do post

1144.64

and our post needs to be

1148.08

the api tutorials so we come back over

1150.96

here so we see post here is our post api

1154.32

so api tutorials

1156.799

we now have our header

1159.2

we have our when

1160.559

and we are doing a post

1163.6

then

1164.4

let's log

1166.24

what we get back

1167.919

let's log everything

1169.919

and again let's check for status

1173.2

of 200

1174.799

which if we look at swagger that's what

1176.88

we should get from our post

1179.6

so post our parameters parameters in the

1182.48

body

1183.76

and our response should be 200 and we

1186.4

should get back

1187.84

our json object with our record id

1192.32

so let me save this

1194.48

and we will rerun this

1211.52

you