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

Collections JAVA

Collection Question:Comparable and Comparator? Comparable Comparator Comparable provides single sorting sequence. In other words, we can sort the collection on the basis of single element such as id or name or price etc. Comparator provides multiple sorting sequence. In other words, we can sort the collection on the basis of multiple elements such as id, name and price etc. Comparable affects the original class i.e. actual class is modified. Comparator doesn't affect the original class i.e. actual class is not modified. Comparable provides compareTo() method to sort elements. Comparator provides compare() method to sort elements. Comparable is found in java.lang package. Comparator is found in java.util package. We can sort the list elements of Comparable type byCollections.sort(List) method. We can sort the list elements of Comparator type   byCollections.sort(List,...

12 - HTML 5 and CSS

HTML 5 Question : If I do not put <! DOCTYPE html> will HTML 5 work? Answer : No, browser will not be able to identify that it’s a HTML document and HTML 5 tags will not function properly. Diff between HTML 5 Layout and HTML 4 or previous HTML? Answer : A typical web page has headers, footers, navigation, central area and side bars. Now if we want to represent the same in HTML 4 with proper names to the HTML section we would probably use a DIV tag. But in HTML 5 they have made it more clear by creating element names for those sections which makes your HTML more readable. Below are more details of the HTML 5 elements which form the page structure. <header> : Represents header data of HTML. <footer> : Footer section of the page. <nav> : Navigation elements in the page. <article> : Self-contained content. <section> : Used inside article to define sections or group content in to sections. <aside> : Represent side bar contents of a...

Spring Interview Question - Version 3.5

Spring Overview Question :   What is Spring? Answer : Spring is an open source development framework for Enterprise Java. The core features of the Spring Framework can be used in developing any Java application, but there are extensions for building web applications on top of the Java EE platform. Spring framework targets to make Java EE development easier to use and promote good programming practice by enabling a POJO based programming model.   Question : What are benefits of Spring Framework? Answer :   Lightweight : Spring is lightweight when it comes to size and transparency. The basic version of spring framework is around 2MB.   Inversion of control (IOC) : Loose coupling is achieved in Spring, with the Inversion of Control technique. The objects give their dependencies instead of creating or looking for dependent objects.   Aspect oriented (AOP) : Spring supports Aspect oriented programming and separates application business logic from...