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,...

11 - JPA/Hibernate Interview Questions

Why Hibernate? Answer : In Short it helps you solve some problem which indirectly comes when you are using JDBC 1. Help you to avoid lots of boilerplate code. 2. Helps you to avoid doing any Connection Management and Transaction Management explicitly. 3. Helps you DB Developer to do exciting things rather than helping the Junior or Mid Level engineer for writing native query. 4. It creates two way data binding between your table and POJO i.e. any change in POJOs's reflects in db table and any changes in db table reflects in application POJO, i.e. objectifies the data layer. 5. Future Proof : Very minimal effort needed to migrate the one database type to another. 6. When you want to do lot of business operation on your POJO's, and you want those POJO's to be handy. When Not to use Hibernate? Answer : Few points to be seen before introducing the Hibernate into your application 1. If you do not have Persistence Layer, there is no use of Hibernate. 2. Legacy ...