Make HTTP requests and serialize/deserialize the request and response to Javascript/Typescript class objects.
Serialized-Request uses Axios to handle HTTP calls and Class-Transformer to transform plain objects from/to class-objects
npm i @simpli/serialized-request axios class-transformer
Serialized-Request supports GET, POST, PUT, PATCH, DELETE and HEAD Http Methods
import{Request,RequestListener}from'@simpli/serialized-request'// RequestListener is optionalclassBlogPost{id: number|null=nulltitle: string|null=nullbody: string|null=nulluserId: number|null=null}constrespBlogPost=awaitRequest.get('https://jsonplaceholder.typicode.com/posts/1').as(BlogPost)// we are choosing to transform to a new object of BlogPost class.getData()/*respBlogPost is a BlogPost object and will be something like this:{ body: `quia et suscipitsuscipit recusandae consequuntur expedita et cumreprehenderit molestiae ut ut quas totamnostrum rerum est autem sunt rem eveniet architecto`, id: 1, title: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", userId: 1}*/constblogPosts=awaitRequest.get('https://jsonplaceholder.typicode.com/posts').asArrayOf(BlogPost)// we are choosing to transform to an array of BlogPost.getData()/*blogPosts is a BlogPost[] and will be something like this:[ { body: `quia et suscipitsuscipit recusandae consequuntur expedita et cumreprehenderit molestiae ut ut quas totamnostrum rerum est autem sunt rem eveniet architecto`, id: 1, title: "sunt aut facere repellat provident occaecati excepturi optio reprehenderit", userId: 1 }, ...]*/// instantiate an objectconstmyBlogPost=newBlogPost()myBlogPost.body='no great news today, the rich are getting richer'// pass the object as the POST request BodyawaitRequest.post('https://jsonplaceholder.typicode.com/posts/',myBlogPost).as(myBlogPost)// and filling its properties on response, PS.: it could be a different object.getData()/* myBlogPost is a BlogPost with the properties filled:{ id: 101, // this id was filled by the server response body: 'no great news today, the rich are getting richer', title: null, userId: null}*/You can use this methods to parse the response:
as(MyClass)- Transforms to a new object of the choosen classas(myInstantiatedObject)- Fills the properties of the choosen objectasArrayOf(MyClass)- Transforms to an array of the choosen classasString()- Returns as stringasNumber()- Returns as numberasBoolean()- Returns as booleanasAny()- Returns as it isasVoid()- Returns nothing
constresp=awaitRequest.delete('https://jsonplaceholder.typicode.com/posts/1').asVoid().getResponse()// if successful, resp.status will be 200// and resp.data will be the response body (use getData() as shortcut)constresp=awaitRequest.head('https://jsonplaceholder.typicode.com/posts/1').delay(2000)// wait 2 seconds before making the request.asString().getResponse()Useful for loading interactions
// on this example we are setting counters for when the request start and endletstartCbCount=0letendCbCount=0conststartCb=(requestName: string)=>startCbCount++constendCb=(requestName: string)=>endCbCount++// then we register the listeners passing a nameRequestListener.onRequestStart(startCb)RequestListener.onRequestEnd(endCb)// make the requestconstmyBlogPost=awaitRequest.get('https://jsonplaceholder.typicode.com/posts/1').name('foo')// set the request name here.as(BlogPost).getData()// then the listeners will be called// startCbCount and endCbCount are both 1 nowRequestListener.removeListener(startCb)// you can remove the specific listenerRequestListener.clearListeners()// or remove all listeners of that nameListeners can use the endpoint instead of the request name aswell
Sometimes you need to do things before and after the serialization
// You only need to implement some methods that will be called during the requestclassCallbackResponsesExample{onBeforeResponse(){// a method called before everything}onBeforeSerialization(){// a method called just before the serialization}onAfterSerialization(){// a method called right after the serialization}}Using Class-Transformer we can control the serialization behaviour