Skip to main content

Graphql

Question : Why GraphQL?
Answer : There are various reason why we benefit from using the graphQL
  1. Clean API between backends and frontends
  2. Less communication overhead 
  3. No more time spent writing API documentation
  4. No more time spent trying to figure out an API
  5. Great tooling for your API
  6. Supports multiple clients and multiple server interactions.
Question : Describe GraphQL in nutshell?
Answer : GraphQL is Language and Runtime both,
Language gives us the tool to specify the queries, mutation, subscription, fragment.
Runtime describe the validation, Type Systems, execution and introspection.

Question : Describe the overall interaction cycle of the graphQL?
Answer : These are the basic steps carried during the interaction between client and the server
  • Read inputs from Interface,
  • Parse into the Abstract Syntax Tree, 
  • invokes its resolver function, then it either gets the scalar data or else invokes another internal resolver function.
  • Data returned from resolver function are then merge together and then return back to the client, which usually in form of JSON.

Question : What makes graphQL so popular?
Answer : Being a data agent is one aspect, addition to that, it is a single poc which takes care of finding the required resource or data from the external system, one way to see the graphQL is it is an ORM for the web services, to achieve the same,
It has strong type system.
It is hierarchical graph based system to get the data based on the schema defined.
it only provide the data as needed, avoid over fetching or accidently providing the data which client has not subscribed to.

Question : Give an example of the variable in graphQL
Answer : To use a variable, we need to add the same variable name prefixed with the $ symbol,

query TestQuery($chId:ID!) {
  channel(id:$chId) {
    channelId
    channelName
    program
    broadCastDate
  }
}

$chId:ID! : This means it is mandatory, and need to be passed, and the varaible should be declared in the variables section with the name chId.

(id:$chId) : channel query needs a parameter called id, now either we can hard code like channel (id : 22) or else we can also use the variable which is injected at the TestQuery level, i.e. $chId. So the $chId is replaced with the variable value when we execute the query.

variables
{
  "chId": 22
}

Question : Give the example of the alises?
Answer : many time we need to transform the response, so that it can be easily applied to the ui component as sometime ui component expect input in certain key value pair format, so to solve those kind of problem alias can be real handy.

query TestQuery($chId:ID!){
   channel(id:$chId) {
    channelId
    channelName: name
    description
    broadCastDate
  }
}

Now the original response from the graphQL service is name but our ui component wants it to be in the form of the channelName, so instead of converting it back to the channelName after the response is received, we are aliasing it in front, e.g. what if the response returns an array, then we need to loop it through entire array to modify the data. So the alising is very handy on these kind of situation.

Question : What is fragments and how can we use them?
Answer : The Fragments are kind of subschema of schema or types defined as the document Type in the graphQL schema.

This is very useful if we want to redfine the partial fields as single type, so that we can use it without even specifying all the fields which we want from the response, so that can make this schema reusable and also leads to concise code.

e.g.
query TestQuery($chId:ID!){
   channel(id:$chId) {
    ... ChannelInfo
  }
}

fragment ChannelInfo on ChannelType {
   channelId
    channelName: name
    description
    createdDate
    lastUpdateTimeStamp
    channelStatus
    recordStatus
}

So here we declared the ChannelInfo and the data or fields will be inherited from the ChannelType which is a return type for the channel query. Hence the statement "fragment ChannelInfo on ChannelTyp" says that we are creating a fragment with the name "ChannelInfo" "on" "ChannelType"



Comments

Popular posts from this blog

NodeJS

Question : Why You should use Node JS? Answer :  Following are the major factor influencing the use of the NodeJS Popularity : The popularity can be important factor, as it has more user base and hence solution  of any common problem faced by developer can found easily online, without any professional help. JavaScript at all levels of the stack :  A common language for frontend and backend offers several potential benefits: The same programming staff can work on both ends of the wire Code can be migrated between server and client more easily Common data formats (JSON) exist between server and client Common software tools exist for server and client Common testing or quality reporting tools for server and client When writing web applications, view templates can be used on both sides Leveraging Google's investment in V8 Engine. Leaner, asynchronous, event-driven model Microservice architecture Question : example of node JS code? Answer :  const fs = require('fs'); co...

Javascript

Question : example of Map Reduce Answer : (() => { let aNumberArray = [ 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ] ; let sum = aNumberArray. map (data => data * 2 ) . reduce ((ongoing , data) => ongoing + data) ; console . log (sum) ; })() Question : What is IIFE? Answer  : Immediately Invoked function expression e.g. (function(){}()). usually pronounces as " effy ". Question : Why the script tag should be added at the bottom or before the end of the body tag? Answer  : It helps the html page to render quickly without even downloading the script which may be getting downloaded from the slow CDN. there are other alternative like async and defer as well, which are supported primarily on new browsers.     <script src="bower_components/angular/angular.min.js" defer></script>     <script src="bower_components/jquery/dist/jquery.min.js" defer></script>     <script src="bower_components...

HTML&CSS

Question : Why title element is important? Answer : This is the element represent, html page in the tab, also when you add this webpage as a bookmark then it will be a default name saved for the bookmark name. Question : What is the benefit of using the label? Answer : the for attribute of lable tag will able to associate the name with the element, and clicking on the label itself is good enough to add the focus and and selection to the given element. Question : Does the box-sizing property affect the overall width or height of the elements? Answer : Yes, border width, padding and margin is added to the width properties, e.g. h1 { line-height : 40 px ; font-weight : bold ; color : aqua ; font-size : 40 px ; width : 300 px ; padding : 50 px ; margin : 50 px ; border : 10 px dotted ; text-align : center ; } This means that the overall of width of the element is width value  + 2 * padding [ right + left ] + 2 * border [ left + right ]. Questio...