Customize Consent Preferences

We use cookies to help you navigate efficiently and perform certain functions. You will find detailed information about all cookies under each consent category below.

The cookies that are categorized as "Necessary" are stored on your browser as they are essential for enabling the basic functionalities of the site. ... 

Always Active

Necessary cookies are required to enable the basic features of this site, such as providing secure log-in or adjusting your consent preferences. These cookies do not store any personally identifiable data.

No cookies to display.

Functional cookies help perform certain functionalities like sharing the content of the website on social media platforms, collecting feedback, and other third-party features.

No cookies to display.

Analytical cookies are used to understand how visitors interact with the website. These cookies help provide information on metrics such as the number of visitors, bounce rate, traffic source, etc.

No cookies to display.

Performance cookies are used to understand and analyze the key performance indexes of the website which helps in delivering a better user experience for the visitors.

No cookies to display.

Advertisement cookies are used to provide visitors with customized advertisements based on the pages you visited previously and to analyze the effectiveness of the ad campaigns.

No cookies to display.

Join us at GITEX 2024! Discover our solutions at Hall 4, Booth H-30 Schedule a Meeting Today.
Automate Marketing Initiatives with Salesforce Marketing Cloud Learn More
Join us at GITEX 2024! Discover our solutions at Hall 4, Booth H-30 Book your live demo today.
Exploring GraphQL with FastAPI A Practical Guide to begin with

Exploring GraphQL with FastAPI: A Practical Guide to begin with

Want to create your own AI Model ?

GraphQL serves as a language for asking questions to APIs and as a tool for getting answers from existing data. It’s like a translator that helps your application talk to databases and other systems. When you use GraphQL, you’re like a detective asking for specific clues – you only get what you ask for. 

Why Choose GraphQL?

GraphQL is pretty cool because it fixes some common problems we face with traditional ways of getting data (like REST APIs). Here’s why: 

  • Get Exactly What You Need: No more getting extra info you don’t want or missing out on stuff you do.
  • Flexible Requests: You can ask for different things in one go, saving time and making things simpler.
  • Easy Development: Imagine having just one stop for all your data needs – that’s GraphQL! It’s like a super organized library where everything has its place.
  • Clear Rules: GraphQL sets clear rules between your app and the servers, making sure everyone understands each other perfectly.
  • Better Performance: By sending only what’s necessary, GraphQL makes your app faster, especially on phones or slow connections. 

Database Connectivity with GraphQL 

GraphQL makes it easy to connect to databases and perform operations. Here, MySQL storage is used, and SQLAlchemy helps integrate seamlessly. 


Enhancing GraphQL with Strawberry 


Strawberry adds extra functionality to GraphQL functions, including queries, types, fields, and mutations. It even supports file uploads within queries. 

Exploring GraphQL with FastAPI: A Practical Guide to begin with

To utilize GraphQL with FastAPI, the process involves several steps: 

  1. Installation: Begin by installing the necessary packages using the provided command: pip install strawberry-GraphQL uvicorn fastapi mysql-connector-python SQLAlchemy.

  2. Database Setup: Begin by establishing a connection to the database to enable operations. In this example, MySQL is utilized for storage, and SQLAlchemy facilitates connectivity to the MySQL database as ORM. This setup typically involves creating a database.py file to manage the connection and a models.py file defining the table columns for the database. 

database.py 

from sqlalchemy import create_engine

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import sessionmaker

DB_USER = graphql_query_user

DB_HOST = 'localhost'

DB_PORT = '3306'

DB_NAME = 'user_data' #Enter the database name

DB_PASSWORD = '*****'

# MySQL connection URL

SQLALCHEMY_DATABASE_URL =

 f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}/{DB_NAME}"

engine = create_engine(SQLALCHEMY_DATABASE_URL)

SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)

Base = declarative_base()

models.py 

from database import Base

from sqlalchemy import Column, Integer, String

from database import engine

class User(Base):

    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)

    firstName = Column(String(255))

    lastName = Column(String(255))

    age = Column(Integer)

    gender = Column(String(10))

    email = Column(String(255))

    phone = Column(String(20))

    username = Column(String(255))

    password = Column(String(255))

# Create the tables in the database

Base.metadata.create_all(bind=engine)

Defining Schemas: Once connected to the database, define the schema for the User in a schemas.py file. This schema outlines the structure of the User data that will be handled by GraphQL. 

schemas.py 

import strawberry

@strawberry.type

class UserType:

    id: int

    firstName: str

    lastName: str

    age: int

    gender: str

    email: str

    phone: str

    username: str

    password: str

@strawberry.type

class DeleteUserResponse:

    success: bool

    message: str

CRUD Operations: Implement the CRUD (Create, Read, Update, Delete) operations in a crud.py file. This involves defining functions to handle operations such as fetching all users, retrieving a user by their ID, updating, deleting, and creating users. These operations are typically categorized under the Query and Mutation types in GraphQL.  

crud.py 

from models import User

import strawberry

from strawberry.extensions import FieldExtension

from typing import List, Any, Callable

from database import SessionLocal

from schemas import UserType, DeleteUserResponse

@strawberry.type

class Query:

    @strawberry.field

    async def users(limit: int = 10, offset: int = 0) -> List[UserType]:

        db = SessionLocal()

        users = db.query(User).offset(offset).limit(limit).all()

        db.close()

        return users

    @strawberry.field

    async def user_by_id(id: int) -> UserType:

        db = SessionLocal()

        user = db.query(User).filter(User.id == id).first()

        db.close()

        return user
  • The Query class, adorned with @strawberry.type, encompasses two GraphQL query functions responsible for fetching user data from the database.
  • The users function retrieves user details from the database, allowing optional parameters limit and offset to specify the number of users returned and the starting index respectively. Upon execution, it opens a session with the database, queries for users with the specified limit and offset, closes the session, and returns the fetched users as a list of UserType.
  • The user_by_id function retrieves user details based on the provided id, opening a session with the database, querying for a user with the matching id, closing the session, and returning the user details corresponding to the provided id as a single UserType. These functions enable efficient data retrieval, catering to scenarios such as fetching all users or accessing details of a specific user by their ID. 
@strawberry.type

class Mutation:

    @strawberry.mutation

    async def create_user(firstName: str, lastName: str, age: int, gender: str, email: str, phone: str, username: str, password: str) -> UserType:

        db = SessionLocal()

        new_user = User(firstName=firstName, lastName=lastName, age=age, gender=gender, email=email, phone=phone, username=username, password=password)

        db.add(new_user)

        db.commit()

        db.refresh(new_user)

        db.close()

        return new_user

    @strawberry.mutation

    async def update_user(id: int, firstName: str, lastName: str, age: int, gender: str, email: str, phone: str, username: str, password: str) -> UserType:

        db = SessionLocal()

        user = db.query(User).filter(User.id == id).first()

        if user:

            user.firstName = firstName

            user.lastName = lastName

            user.age = age

            user.gender = gender

            user.email = email

            user.phone = phone

            user.username = username

            user.password = password

            db.commit()

            db.refresh(user)

        db.close()

        return user

    @strawberry.mutation

    async def delete_user(id: int) -> DeleteUserResponse:

        db = SessionLocal()

        user = db.query(User).filter(User.id == id).first()

        if user:

            db.delete(user)

            db.commit()

            db.close()

            return DeleteUserResponse(success=True, message=f"User with ID {id} deleted successfully.")

        else:

            db.close()

            return DeleteUserResponse(success=False, message=f"User with ID {id} not found.")

The Mutation class, decorated with @strawberry.type, defines three GraphQL mutation functions to create, update, and delete user data in the database. 

  • The create_user mutation function asynchronously creates a new user with the provided parameters – first name, last name, age, gender, email, phone, username, and password. Upon execution, it establishes a connection to the database, adds the new user, commits the transaction, refreshes the database to reflect changes, and finally closes the session before returning the newly created user.

  • The update_user mutation function updates an existing user’s details based on the provided id and other parameters. It begins by querying the database for the user with the matching id, and if found, updates the user’s attributes with the new values. It commits the changes, refreshes the database, closes the session, and returns the updated user. If no user with the provided id is found, it returns None.

  • The delete_user mutation function deletes a user from the database based on the provided id. It starts by querying the database for the user with the specified id. If the user exists, it deletes the user, commits the transaction, and returns a success message along with a boolean indicating successful deletion. If no user is found with the provided id, it returns a failure message stating that the user was not found. Finally, it closes the database session before returning the response. These mutation functions provide essential functionalities for managing user data within the application. 

Schema Definition: Define the schema using Strawberry, specifying the mutations and queries that correspond to the CRUD operations implemented in the crud.py file. 

schema = strawberry.Schema(query=Query,mutation=Mutation)

6. FastAPI Endpoint Creation: Create a FastAPI endpoint at “/graphql” to handle    GraphQL mutations. Use add_route to integrate the GraphQL functionality provided by Strawberry into your FastAPI application. 

main.py 

from fastapi import FastAPI

from strawberry.asgi import GraphQL

from crud import schema

app = FastAPI()

graphql_app = GraphQL(schema)

# Add GraphQL routes to FastAPI app

app.add_route("/graphql", graphql_app)

7.  Running the Application: Execute the command uvicorn main:app –reload to  run     the application. After running, access it at http://localhost:8000/GraphQL. You can perform queries directly within the GraphQL body in Postman. 
 

Query to Execute: 

# Query to get user by id

query{

  userById(id: 1){

    firstName

    lastName

    email

    password

  }

}

# Query to get users details

query{

  users{

    id

    firstName

    lastName

    email

  }

}

# Query to create user

mutation {

  createUser(

    firstName: "John"

    lastName: "Doe"

    age: 30

    gender: "Male"

    email: "john.doe@example.com"

    phone: "1234567890"

    username: "johndoe"

    password: "password123"

  ) {

    id

    firstName

    lastName

    age

    gender

    email

    phone

    username

  }

}

# Query to delete user

mutation {

  deleteUser(id: 23) {

   success

   message

  }

}

# Query to update user details

mutation {

  updateUser(

    id: 21

    firstName: "John"

    lastName: "Doe"

    age: 30

    gender: "Male"

    email: "john.doe@example.com"

    phone: "1234567890"

    username: "johndoe"

    password: "password123"

  ) {

    id

    firstName

    lastName

    age

    gender

    email

    phone

    username

  }

}

Here’s a screenshot from Postman showing the testing of fetching a user by their ID using GraphQL

GraphQL

File upload with GraphQL

  • Install the required packages using this command  – pip install strawberry-GraphQL  uvicorn  fastapi  python-multipart
  • Create a function that accepts a file as input and reads it. This function, named read_file, processes the uploaded file. Schema using Strawberry, specifying the mutation. Ensure to override the default scalar for file uploads to utilize the provided Upload scalar. 

crud.py 

from sqlalchemy.orm import Session

import strawberry

from typing import List, Union, Any, Callable

from strawberry.file_uploads import Upload

from starlette.datastructures import UploadFile

@strawberry.type

class Mutation:

    @strawberry.mutation

    async def read_file(self, file: Upload) -> str:

        return (await file.read()).decode("utf-8")

schema = strawberry.Schema(query=Query,mutation=Mutation, scalar_overrides={UploadFile: Upload})

Create a FastAPI endpoint at “/GraphQL” to handle GraphQL mutations. Use add_route to integrate the GraphQL functionality provided by Strawberry into your FastAPI application. 

main.py 

from fastapi import FastAPI

from strawberry.asgi import GraphQL

from crud import schema

app = FastAPI()

GraphQL_app = GraphQL(schema)

# Add GraphQL routes to FastAPI app

app.add_route("/GraphQL", GraphQL_app)
  • Execute the command uvicorn main:app –reload to  run   the application. After running, access it at http://localhost:8000/GraphQL.

You can also make API calls using Postman.
 
To upload a file using Postman, follow these steps: 

  • Set up the request as a POST request to the GraphQL endpoint.
  • In the request body, select “form-data”.
  • Add the following key-value pairs in the form-data: 
    1. Key: operations  
          Value:  

      “query”: “mutation($file: Upload!){ readFile(file: $file) }”, 
      “variables”: { “file”: null } 

           2. Key: map  
               Value: 
    { “file”: [“variables.file”] } 

       3.  Key: file  
          Value: Select the file you want to upload using the file selector. 

    This setup allows you to upload a file via the file parameter. 

Here’s a screenshot from Postman showing the testing of reading file data by upload a file using GraphQL.

GraphQL

In conclusion, GraphQL makes CRUD operations easier by putting them all in one place through queries and mutations. This makes it easier for developers to build APIs and for clients to get exactly the data they need, making apps faster. But GraphQL faces challenges like query complexity, where really deep queries can slow down servers. Also, caching and setting limits on requests can be tricky, which affects how well servers run. 

    +1
    • United States+1
    • United Kingdom+44
    • Afghanistan (‫افغانستان‬‎)+93
    • Albania (Shqipëri)+355
    • Algeria (‫الجزائر‬‎)+213
    • American Samoa+1684
    • Andorra+376
    • Angola+244
    • Anguilla+1264
    • Antigua and Barbuda+1268
    • Argentina+54
    • Armenia (Հայաստան)+374
    • Aruba+297
    • Australia+61
    • Austria (Österreich)+43
    • Azerbaijan (Azərbaycan)+994
    • Bahamas+1242
    • Bahrain (‫البحرين‬‎)+973
    • Bangladesh (বাংলাদেশ)+880
    • Barbados+1246
    • Belarus (Беларусь)+375
    • Belgium (België)+32
    • Belize+501
    • Benin (Bénin)+229
    • Bermuda+1441
    • Bhutan (འབྲུག)+975
    • Bolivia+591
    • Bosnia and Herzegovina (Босна и Херцеговина)+387
    • Botswana+267
    • Brazil (Brasil)+55
    • British Indian Ocean Territory+246
    • British Virgin Islands+1284
    • Brunei+673
    • Bulgaria (България)+359
    • Burkina Faso+226
    • Burundi (Uburundi)+257
    • Cambodia (កម្ពុជា)+855
    • Cameroon (Cameroun)+237
    • Canada+1
    • Cape Verde (Kabu Verdi)+238
    • Caribbean Netherlands+599
    • Cayman Islands+1345
    • Central African Republic (République centrafricaine)+236
    • Chad (Tchad)+235
    • Chile+56
    • China (中国)+86
    • Christmas Island+61
    • Cocos (Keeling) Islands+61
    • Colombia+57
    • Comoros (‫جزر القمر‬‎)+269
    • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
    • Congo (Republic) (Congo-Brazzaville)+242
    • Cook Islands+682
    • Costa Rica+506
    • Côte d’Ivoire+225
    • Croatia (Hrvatska)+385
    • Cuba+53
    • Curaçao+599
    • Cyprus (Κύπρος)+357
    • Czech Republic (Česká republika)+420
    • Denmark (Danmark)+45
    • Djibouti+253
    • Dominica+1767
    • Dominican Republic (República Dominicana)+1
    • Ecuador+593
    • Egypt (‫مصر‬‎)+20
    • El Salvador+503
    • Equatorial Guinea (Guinea Ecuatorial)+240
    • Eritrea+291
    • Estonia (Eesti)+372
    • Ethiopia+251
    • Falkland Islands (Islas Malvinas)+500
    • Faroe Islands (Føroyar)+298
    • Fiji+679
    • Finland (Suomi)+358
    • France+33
    • French Guiana (Guyane française)+594
    • French Polynesia (Polynésie française)+689
    • Gabon+241
    • Gambia+220
    • Georgia (საქართველო)+995
    • Germany (Deutschland)+49
    • Ghana (Gaana)+233
    • Gibraltar+350
    • Greece (Ελλάδα)+30
    • Greenland (Kalaallit Nunaat)+299
    • Grenada+1473
    • Guadeloupe+590
    • Guam+1671
    • Guatemala+502
    • Guernsey+44
    • Guinea (Guinée)+224
    • Guinea-Bissau (Guiné Bissau)+245
    • Guyana+592
    • Haiti+509
    • Honduras+504
    • Hong Kong (香港)+852
    • Hungary (Magyarország)+36
    • Iceland (Ísland)+354
    • India (भारत)+91
    • Indonesia+62
    • Iran (‫ایران‬‎)+98
    • Iraq (‫العراق‬‎)+964
    • Ireland+353
    • Isle of Man+44
    • Israel (‫ישראל‬‎)+972
    • Italy (Italia)+39
    • Jamaica+1
    • Japan (日本)+81
    • Jersey+44
    • Jordan (‫الأردن‬‎)+962
    • Kazakhstan (Казахстан)+7
    • Kenya+254
    • Kiribati+686
    • Kosovo+383
    • Kuwait (‫الكويت‬‎)+965
    • Kyrgyzstan (Кыргызстан)+996
    • Laos (ລາວ)+856
    • Latvia (Latvija)+371
    • Lebanon (‫لبنان‬‎)+961
    • Lesotho+266
    • Liberia+231
    • Libya (‫ليبيا‬‎)+218
    • Liechtenstein+423
    • Lithuania (Lietuva)+370
    • Luxembourg+352
    • Macau (澳門)+853
    • Macedonia (FYROM) (Македонија)+389
    • Madagascar (Madagasikara)+261
    • Malawi+265
    • Malaysia+60
    • Maldives+960
    • Mali+223
    • Malta+356
    • Marshall Islands+692
    • Martinique+596
    • Mauritania (‫موريتانيا‬‎)+222
    • Mauritius (Moris)+230
    • Mayotte+262
    • Mexico (México)+52
    • Micronesia+691
    • Moldova (Republica Moldova)+373
    • Monaco+377
    • Mongolia (Монгол)+976
    • Montenegro (Crna Gora)+382
    • Montserrat+1664
    • Morocco (‫المغرب‬‎)+212
    • Mozambique (Moçambique)+258
    • Myanmar (Burma) (မြန်မာ)+95
    • Namibia (Namibië)+264
    • Nauru+674
    • Nepal (नेपाल)+977
    • Netherlands (Nederland)+31
    • New Caledonia (Nouvelle-Calédonie)+687
    • New Zealand+64
    • Nicaragua+505
    • Niger (Nijar)+227
    • Nigeria+234
    • Niue+683
    • Norfolk Island+672
    • North Korea (조선 민주주의 인민 공화국)+850
    • Northern Mariana Islands+1670
    • Norway (Norge)+47
    • Oman (‫عُمان‬‎)+968
    • Pakistan (‫پاکستان‬‎)+92
    • Palau+680
    • Palestine (‫فلسطين‬‎)+970
    • Panama (Panamá)+507
    • Papua New Guinea+675
    • Paraguay+595
    • Peru (Perú)+51
    • Philippines+63
    • Poland (Polska)+48
    • Portugal+351
    • Puerto Rico+1
    • Qatar (‫قطر‬‎)+974
    • Réunion (La Réunion)+262
    • Romania (România)+40
    • Russia (Россия)+7
    • Rwanda+250
    • Saint Barthélemy+590
    • Saint Helena+290
    • Saint Kitts and Nevis+1869
    • Saint Lucia+1758
    • Saint Martin (Saint-Martin (partie française))+590
    • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
    • Saint Vincent and the Grenadines+1784
    • Samoa+685
    • San Marino+378
    • São Tomé and Príncipe (São Tomé e Príncipe)+239
    • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
    • Senegal (Sénégal)+221
    • Serbia (Србија)+381
    • Seychelles+248
    • Sierra Leone+232
    • Singapore+65
    • Sint Maarten+1721
    • Slovakia (Slovensko)+421
    • Slovenia (Slovenija)+386
    • Solomon Islands+677
    • Somalia (Soomaaliya)+252
    • South Africa+27
    • South Korea (대한민국)+82
    • South Sudan (‫جنوب السودان‬‎)+211
    • Spain (España)+34
    • Sri Lanka (ශ්‍රී ලංකාව)+94
    • Sudan (‫السودان‬‎)+249
    • Suriname+597
    • Svalbard and Jan Mayen+47
    • Swaziland+268
    • Sweden (Sverige)+46
    • Switzerland (Schweiz)+41
    • Syria (‫سوريا‬‎)+963
    • Taiwan (台灣)+886
    • Tajikistan+992
    • Tanzania+255
    • Thailand (ไทย)+66
    • Timor-Leste+670
    • Togo+228
    • Tokelau+690
    • Tonga+676
    • Trinidad and Tobago+1868
    • Tunisia (‫تونس‬‎)+216
    • Turkey (Türkiye)+90
    • Turkmenistan+993
    • Turks and Caicos Islands+1649
    • Tuvalu+688
    • U.S. Virgin Islands+1340
    • Uganda+256
    • Ukraine (Україна)+380
    • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
    • United Kingdom+44
    • United States+1
    • Uruguay+598
    • Uzbekistan (Oʻzbekiston)+998
    • Vanuatu+678
    • Vatican City (Città del Vaticano)+39
    • Venezuela+58
    • Vietnam (Việt Nam)+84
    • Wallis and Futuna (Wallis-et-Futuna)+681
    • Western Sahara (‫الصحراء الغربية‬‎)+212
    • Yemen (‫اليمن‬‎)+967
    • Zambia+260
    • Zimbabwe+263
    • Åland Islands+358

      +1
      • United States+1
      • United Kingdom+44
      • Afghanistan (‫افغانستان‬‎)+93
      • Albania (Shqipëri)+355
      • Algeria (‫الجزائر‬‎)+213
      • American Samoa+1684
      • Andorra+376
      • Angola+244
      • Anguilla+1264
      • Antigua and Barbuda+1268
      • Argentina+54
      • Armenia (Հայաստան)+374
      • Aruba+297
      • Australia+61
      • Austria (Österreich)+43
      • Azerbaijan (Azərbaycan)+994
      • Bahamas+1242
      • Bahrain (‫البحرين‬‎)+973
      • Bangladesh (বাংলাদেশ)+880
      • Barbados+1246
      • Belarus (Беларусь)+375
      • Belgium (België)+32
      • Belize+501
      • Benin (Bénin)+229
      • Bermuda+1441
      • Bhutan (འབྲུག)+975
      • Bolivia+591
      • Bosnia and Herzegovina (Босна и Херцеговина)+387
      • Botswana+267
      • Brazil (Brasil)+55
      • British Indian Ocean Territory+246
      • British Virgin Islands+1284
      • Brunei+673
      • Bulgaria (България)+359
      • Burkina Faso+226
      • Burundi (Uburundi)+257
      • Cambodia (កម្ពុជា)+855
      • Cameroon (Cameroun)+237
      • Canada+1
      • Cape Verde (Kabu Verdi)+238
      • Caribbean Netherlands+599
      • Cayman Islands+1345
      • Central African Republic (République centrafricaine)+236
      • Chad (Tchad)+235
      • Chile+56
      • China (中国)+86
      • Christmas Island+61
      • Cocos (Keeling) Islands+61
      • Colombia+57
      • Comoros (‫جزر القمر‬‎)+269
      • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
      • Congo (Republic) (Congo-Brazzaville)+242
      • Cook Islands+682
      • Costa Rica+506
      • Côte d’Ivoire+225
      • Croatia (Hrvatska)+385
      • Cuba+53
      • Curaçao+599
      • Cyprus (Κύπρος)+357
      • Czech Republic (Česká republika)+420
      • Denmark (Danmark)+45
      • Djibouti+253
      • Dominica+1767
      • Dominican Republic (República Dominicana)+1
      • Ecuador+593
      • Egypt (‫مصر‬‎)+20
      • El Salvador+503
      • Equatorial Guinea (Guinea Ecuatorial)+240
      • Eritrea+291
      • Estonia (Eesti)+372
      • Ethiopia+251
      • Falkland Islands (Islas Malvinas)+500
      • Faroe Islands (Føroyar)+298
      • Fiji+679
      • Finland (Suomi)+358
      • France+33
      • French Guiana (Guyane française)+594
      • French Polynesia (Polynésie française)+689
      • Gabon+241
      • Gambia+220
      • Georgia (საქართველო)+995
      • Germany (Deutschland)+49
      • Ghana (Gaana)+233
      • Gibraltar+350
      • Greece (Ελλάδα)+30
      • Greenland (Kalaallit Nunaat)+299
      • Grenada+1473
      • Guadeloupe+590
      • Guam+1671
      • Guatemala+502
      • Guernsey+44
      • Guinea (Guinée)+224
      • Guinea-Bissau (Guiné Bissau)+245
      • Guyana+592
      • Haiti+509
      • Honduras+504
      • Hong Kong (香港)+852
      • Hungary (Magyarország)+36
      • Iceland (Ísland)+354
      • India (भारत)+91
      • Indonesia+62
      • Iran (‫ایران‬‎)+98
      • Iraq (‫العراق‬‎)+964
      • Ireland+353
      • Isle of Man+44
      • Israel (‫ישראל‬‎)+972
      • Italy (Italia)+39
      • Jamaica+1
      • Japan (日本)+81
      • Jersey+44
      • Jordan (‫الأردن‬‎)+962
      • Kazakhstan (Казахстан)+7
      • Kenya+254
      • Kiribati+686
      • Kosovo+383
      • Kuwait (‫الكويت‬‎)+965
      • Kyrgyzstan (Кыргызстан)+996
      • Laos (ລາວ)+856
      • Latvia (Latvija)+371
      • Lebanon (‫لبنان‬‎)+961
      • Lesotho+266
      • Liberia+231
      • Libya (‫ليبيا‬‎)+218
      • Liechtenstein+423
      • Lithuania (Lietuva)+370
      • Luxembourg+352
      • Macau (澳門)+853
      • Macedonia (FYROM) (Македонија)+389
      • Madagascar (Madagasikara)+261
      • Malawi+265
      • Malaysia+60
      • Maldives+960
      • Mali+223
      • Malta+356
      • Marshall Islands+692
      • Martinique+596
      • Mauritania (‫موريتانيا‬‎)+222
      • Mauritius (Moris)+230
      • Mayotte+262
      • Mexico (México)+52
      • Micronesia+691
      • Moldova (Republica Moldova)+373
      • Monaco+377
      • Mongolia (Монгол)+976
      • Montenegro (Crna Gora)+382
      • Montserrat+1664
      • Morocco (‫المغرب‬‎)+212
      • Mozambique (Moçambique)+258
      • Myanmar (Burma) (မြန်မာ)+95
      • Namibia (Namibië)+264
      • Nauru+674
      • Nepal (नेपाल)+977
      • Netherlands (Nederland)+31
      • New Caledonia (Nouvelle-Calédonie)+687
      • New Zealand+64
      • Nicaragua+505
      • Niger (Nijar)+227
      • Nigeria+234
      • Niue+683
      • Norfolk Island+672
      • North Korea (조선 민주주의 인민 공화국)+850
      • Northern Mariana Islands+1670
      • Norway (Norge)+47
      • Oman (‫عُمان‬‎)+968
      • Pakistan (‫پاکستان‬‎)+92
      • Palau+680
      • Palestine (‫فلسطين‬‎)+970
      • Panama (Panamá)+507
      • Papua New Guinea+675
      • Paraguay+595
      • Peru (Perú)+51
      • Philippines+63
      • Poland (Polska)+48
      • Portugal+351
      • Puerto Rico+1
      • Qatar (‫قطر‬‎)+974
      • Réunion (La Réunion)+262
      • Romania (România)+40
      • Russia (Россия)+7
      • Rwanda+250
      • Saint Barthélemy+590
      • Saint Helena+290
      • Saint Kitts and Nevis+1869
      • Saint Lucia+1758
      • Saint Martin (Saint-Martin (partie française))+590
      • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
      • Saint Vincent and the Grenadines+1784
      • Samoa+685
      • San Marino+378
      • São Tomé and Príncipe (São Tomé e Príncipe)+239
      • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
      • Senegal (Sénégal)+221
      • Serbia (Србија)+381
      • Seychelles+248
      • Sierra Leone+232
      • Singapore+65
      • Sint Maarten+1721
      • Slovakia (Slovensko)+421
      • Slovenia (Slovenija)+386
      • Solomon Islands+677
      • Somalia (Soomaaliya)+252
      • South Africa+27
      • South Korea (대한민국)+82
      • South Sudan (‫جنوب السودان‬‎)+211
      • Spain (España)+34
      • Sri Lanka (ශ්‍රී ලංකාව)+94
      • Sudan (‫السودان‬‎)+249
      • Suriname+597
      • Svalbard and Jan Mayen+47
      • Swaziland+268
      • Sweden (Sverige)+46
      • Switzerland (Schweiz)+41
      • Syria (‫سوريا‬‎)+963
      • Taiwan (台灣)+886
      • Tajikistan+992
      • Tanzania+255
      • Thailand (ไทย)+66
      • Timor-Leste+670
      • Togo+228
      • Tokelau+690
      • Tonga+676
      • Trinidad and Tobago+1868
      • Tunisia (‫تونس‬‎)+216
      • Turkey (Türkiye)+90
      • Turkmenistan+993
      • Turks and Caicos Islands+1649
      • Tuvalu+688
      • U.S. Virgin Islands+1340
      • Uganda+256
      • Ukraine (Україна)+380
      • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
      • United Kingdom+44
      • United States+1
      • Uruguay+598
      • Uzbekistan (Oʻzbekiston)+998
      • Vanuatu+678
      • Vatican City (Città del Vaticano)+39
      • Venezuela+58
      • Vietnam (Việt Nam)+84
      • Wallis and Futuna (Wallis-et-Futuna)+681
      • Western Sahara (‫الصحراء الغربية‬‎)+212
      • Yemen (‫اليمن‬‎)+967
      • Zambia+260
      • Zimbabwe+263
      • Åland Islands+358

        +1
        • United States+1
        • United Kingdom+44
        • Afghanistan (‫افغانستان‬‎)+93
        • Albania (Shqipëri)+355
        • Algeria (‫الجزائر‬‎)+213
        • American Samoa+1684
        • Andorra+376
        • Angola+244
        • Anguilla+1264
        • Antigua and Barbuda+1268
        • Argentina+54
        • Armenia (Հայաստան)+374
        • Aruba+297
        • Australia+61
        • Austria (Österreich)+43
        • Azerbaijan (Azərbaycan)+994
        • Bahamas+1242
        • Bahrain (‫البحرين‬‎)+973
        • Bangladesh (বাংলাদেশ)+880
        • Barbados+1246
        • Belarus (Беларусь)+375
        • Belgium (België)+32
        • Belize+501
        • Benin (Bénin)+229
        • Bermuda+1441
        • Bhutan (འབྲུག)+975
        • Bolivia+591
        • Bosnia and Herzegovina (Босна и Херцеговина)+387
        • Botswana+267
        • Brazil (Brasil)+55
        • British Indian Ocean Territory+246
        • British Virgin Islands+1284
        • Brunei+673
        • Bulgaria (България)+359
        • Burkina Faso+226
        • Burundi (Uburundi)+257
        • Cambodia (កម្ពុជា)+855
        • Cameroon (Cameroun)+237
        • Canada+1
        • Cape Verde (Kabu Verdi)+238
        • Caribbean Netherlands+599
        • Cayman Islands+1345
        • Central African Republic (République centrafricaine)+236
        • Chad (Tchad)+235
        • Chile+56
        • China (中国)+86
        • Christmas Island+61
        • Cocos (Keeling) Islands+61
        • Colombia+57
        • Comoros (‫جزر القمر‬‎)+269
        • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
        • Congo (Republic) (Congo-Brazzaville)+242
        • Cook Islands+682
        • Costa Rica+506
        • Côte d’Ivoire+225
        • Croatia (Hrvatska)+385
        • Cuba+53
        • Curaçao+599
        • Cyprus (Κύπρος)+357
        • Czech Republic (Česká republika)+420
        • Denmark (Danmark)+45
        • Djibouti+253
        • Dominica+1767
        • Dominican Republic (República Dominicana)+1
        • Ecuador+593
        • Egypt (‫مصر‬‎)+20
        • El Salvador+503
        • Equatorial Guinea (Guinea Ecuatorial)+240
        • Eritrea+291
        • Estonia (Eesti)+372
        • Ethiopia+251
        • Falkland Islands (Islas Malvinas)+500
        • Faroe Islands (Føroyar)+298
        • Fiji+679
        • Finland (Suomi)+358
        • France+33
        • French Guiana (Guyane française)+594
        • French Polynesia (Polynésie française)+689
        • Gabon+241
        • Gambia+220
        • Georgia (საქართველო)+995
        • Germany (Deutschland)+49
        • Ghana (Gaana)+233
        • Gibraltar+350
        • Greece (Ελλάδα)+30
        • Greenland (Kalaallit Nunaat)+299
        • Grenada+1473
        • Guadeloupe+590
        • Guam+1671
        • Guatemala+502
        • Guernsey+44
        • Guinea (Guinée)+224
        • Guinea-Bissau (Guiné Bissau)+245
        • Guyana+592
        • Haiti+509
        • Honduras+504
        • Hong Kong (香港)+852
        • Hungary (Magyarország)+36
        • Iceland (Ísland)+354
        • India (भारत)+91
        • Indonesia+62
        • Iran (‫ایران‬‎)+98
        • Iraq (‫العراق‬‎)+964
        • Ireland+353
        • Isle of Man+44
        • Israel (‫ישראל‬‎)+972
        • Italy (Italia)+39
        • Jamaica+1
        • Japan (日本)+81
        • Jersey+44
        • Jordan (‫الأردن‬‎)+962
        • Kazakhstan (Казахстан)+7
        • Kenya+254
        • Kiribati+686
        • Kosovo+383
        • Kuwait (‫الكويت‬‎)+965
        • Kyrgyzstan (Кыргызстан)+996
        • Laos (ລາວ)+856
        • Latvia (Latvija)+371
        • Lebanon (‫لبنان‬‎)+961
        • Lesotho+266
        • Liberia+231
        • Libya (‫ليبيا‬‎)+218
        • Liechtenstein+423
        • Lithuania (Lietuva)+370
        • Luxembourg+352
        • Macau (澳門)+853
        • Macedonia (FYROM) (Македонија)+389
        • Madagascar (Madagasikara)+261
        • Malawi+265
        • Malaysia+60
        • Maldives+960
        • Mali+223
        • Malta+356
        • Marshall Islands+692
        • Martinique+596
        • Mauritania (‫موريتانيا‬‎)+222
        • Mauritius (Moris)+230
        • Mayotte+262
        • Mexico (México)+52
        • Micronesia+691
        • Moldova (Republica Moldova)+373
        • Monaco+377
        • Mongolia (Монгол)+976
        • Montenegro (Crna Gora)+382
        • Montserrat+1664
        • Morocco (‫المغرب‬‎)+212
        • Mozambique (Moçambique)+258
        • Myanmar (Burma) (မြန်မာ)+95
        • Namibia (Namibië)+264
        • Nauru+674
        • Nepal (नेपाल)+977
        • Netherlands (Nederland)+31
        • New Caledonia (Nouvelle-Calédonie)+687
        • New Zealand+64
        • Nicaragua+505
        • Niger (Nijar)+227
        • Nigeria+234
        • Niue+683
        • Norfolk Island+672
        • North Korea (조선 민주주의 인민 공화국)+850
        • Northern Mariana Islands+1670
        • Norway (Norge)+47
        • Oman (‫عُمان‬‎)+968
        • Pakistan (‫پاکستان‬‎)+92
        • Palau+680
        • Palestine (‫فلسطين‬‎)+970
        • Panama (Panamá)+507
        • Papua New Guinea+675
        • Paraguay+595
        • Peru (Perú)+51
        • Philippines+63
        • Poland (Polska)+48
        • Portugal+351
        • Puerto Rico+1
        • Qatar (‫قطر‬‎)+974
        • Réunion (La Réunion)+262
        • Romania (România)+40
        • Russia (Россия)+7
        • Rwanda+250
        • Saint Barthélemy+590
        • Saint Helena+290
        • Saint Kitts and Nevis+1869
        • Saint Lucia+1758
        • Saint Martin (Saint-Martin (partie française))+590
        • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
        • Saint Vincent and the Grenadines+1784
        • Samoa+685
        • San Marino+378
        • São Tomé and Príncipe (São Tomé e Príncipe)+239
        • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
        • Senegal (Sénégal)+221
        • Serbia (Србија)+381
        • Seychelles+248
        • Sierra Leone+232
        • Singapore+65
        • Sint Maarten+1721
        • Slovakia (Slovensko)+421
        • Slovenia (Slovenija)+386
        • Solomon Islands+677
        • Somalia (Soomaaliya)+252
        • South Africa+27
        • South Korea (대한민국)+82
        • South Sudan (‫جنوب السودان‬‎)+211
        • Spain (España)+34
        • Sri Lanka (ශ්‍රී ලංකාව)+94
        • Sudan (‫السودان‬‎)+249
        • Suriname+597
        • Svalbard and Jan Mayen+47
        • Swaziland+268
        • Sweden (Sverige)+46
        • Switzerland (Schweiz)+41
        • Syria (‫سوريا‬‎)+963
        • Taiwan (台灣)+886
        • Tajikistan+992
        • Tanzania+255
        • Thailand (ไทย)+66
        • Timor-Leste+670
        • Togo+228
        • Tokelau+690
        • Tonga+676
        • Trinidad and Tobago+1868
        • Tunisia (‫تونس‬‎)+216
        • Turkey (Türkiye)+90
        • Turkmenistan+993
        • Turks and Caicos Islands+1649
        • Tuvalu+688
        • U.S. Virgin Islands+1340
        • Uganda+256
        • Ukraine (Україна)+380
        • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
        • United Kingdom+44
        • United States+1
        • Uruguay+598
        • Uzbekistan (Oʻzbekiston)+998
        • Vanuatu+678
        • Vatican City (Città del Vaticano)+39
        • Venezuela+58
        • Vietnam (Việt Nam)+84
        • Wallis and Futuna (Wallis-et-Futuna)+681
        • Western Sahara (‫الصحراء الغربية‬‎)+212
        • Yemen (‫اليمن‬‎)+967
        • Zambia+260
        • Zimbabwe+263
        • Åland Islands+358

          +1
          • United States+1
          • United Kingdom+44
          • Afghanistan (‫افغانستان‬‎)+93
          • Albania (Shqipëri)+355
          • Algeria (‫الجزائر‬‎)+213
          • American Samoa+1684
          • Andorra+376
          • Angola+244
          • Anguilla+1264
          • Antigua and Barbuda+1268
          • Argentina+54
          • Armenia (Հայաստան)+374
          • Aruba+297
          • Australia+61
          • Austria (Österreich)+43
          • Azerbaijan (Azərbaycan)+994
          • Bahamas+1242
          • Bahrain (‫البحرين‬‎)+973
          • Bangladesh (বাংলাদেশ)+880
          • Barbados+1246
          • Belarus (Беларусь)+375
          • Belgium (België)+32
          • Belize+501
          • Benin (Bénin)+229
          • Bermuda+1441
          • Bhutan (འབྲུག)+975
          • Bolivia+591
          • Bosnia and Herzegovina (Босна и Херцеговина)+387
          • Botswana+267
          • Brazil (Brasil)+55
          • British Indian Ocean Territory+246
          • British Virgin Islands+1284
          • Brunei+673
          • Bulgaria (България)+359
          • Burkina Faso+226
          • Burundi (Uburundi)+257
          • Cambodia (កម្ពុជា)+855
          • Cameroon (Cameroun)+237
          • Canada+1
          • Cape Verde (Kabu Verdi)+238
          • Caribbean Netherlands+599
          • Cayman Islands+1345
          • Central African Republic (République centrafricaine)+236
          • Chad (Tchad)+235
          • Chile+56
          • China (中国)+86
          • Christmas Island+61
          • Cocos (Keeling) Islands+61
          • Colombia+57
          • Comoros (‫جزر القمر‬‎)+269
          • Congo (DRC) (Jamhuri ya Kidemokrasia ya Kongo)+243
          • Congo (Republic) (Congo-Brazzaville)+242
          • Cook Islands+682
          • Costa Rica+506
          • Côte d’Ivoire+225
          • Croatia (Hrvatska)+385
          • Cuba+53
          • Curaçao+599
          • Cyprus (Κύπρος)+357
          • Czech Republic (Česká republika)+420
          • Denmark (Danmark)+45
          • Djibouti+253
          • Dominica+1767
          • Dominican Republic (República Dominicana)+1
          • Ecuador+593
          • Egypt (‫مصر‬‎)+20
          • El Salvador+503
          • Equatorial Guinea (Guinea Ecuatorial)+240
          • Eritrea+291
          • Estonia (Eesti)+372
          • Ethiopia+251
          • Falkland Islands (Islas Malvinas)+500
          • Faroe Islands (Føroyar)+298
          • Fiji+679
          • Finland (Suomi)+358
          • France+33
          • French Guiana (Guyane française)+594
          • French Polynesia (Polynésie française)+689
          • Gabon+241
          • Gambia+220
          • Georgia (საქართველო)+995
          • Germany (Deutschland)+49
          • Ghana (Gaana)+233
          • Gibraltar+350
          • Greece (Ελλάδα)+30
          • Greenland (Kalaallit Nunaat)+299
          • Grenada+1473
          • Guadeloupe+590
          • Guam+1671
          • Guatemala+502
          • Guernsey+44
          • Guinea (Guinée)+224
          • Guinea-Bissau (Guiné Bissau)+245
          • Guyana+592
          • Haiti+509
          • Honduras+504
          • Hong Kong (香港)+852
          • Hungary (Magyarország)+36
          • Iceland (Ísland)+354
          • India (भारत)+91
          • Indonesia+62
          • Iran (‫ایران‬‎)+98
          • Iraq (‫العراق‬‎)+964
          • Ireland+353
          • Isle of Man+44
          • Israel (‫ישראל‬‎)+972
          • Italy (Italia)+39
          • Jamaica+1
          • Japan (日本)+81
          • Jersey+44
          • Jordan (‫الأردن‬‎)+962
          • Kazakhstan (Казахстан)+7
          • Kenya+254
          • Kiribati+686
          • Kosovo+383
          • Kuwait (‫الكويت‬‎)+965
          • Kyrgyzstan (Кыргызстан)+996
          • Laos (ລາວ)+856
          • Latvia (Latvija)+371
          • Lebanon (‫لبنان‬‎)+961
          • Lesotho+266
          • Liberia+231
          • Libya (‫ليبيا‬‎)+218
          • Liechtenstein+423
          • Lithuania (Lietuva)+370
          • Luxembourg+352
          • Macau (澳門)+853
          • Macedonia (FYROM) (Македонија)+389
          • Madagascar (Madagasikara)+261
          • Malawi+265
          • Malaysia+60
          • Maldives+960
          • Mali+223
          • Malta+356
          • Marshall Islands+692
          • Martinique+596
          • Mauritania (‫موريتانيا‬‎)+222
          • Mauritius (Moris)+230
          • Mayotte+262
          • Mexico (México)+52
          • Micronesia+691
          • Moldova (Republica Moldova)+373
          • Monaco+377
          • Mongolia (Монгол)+976
          • Montenegro (Crna Gora)+382
          • Montserrat+1664
          • Morocco (‫المغرب‬‎)+212
          • Mozambique (Moçambique)+258
          • Myanmar (Burma) (မြန်မာ)+95
          • Namibia (Namibië)+264
          • Nauru+674
          • Nepal (नेपाल)+977
          • Netherlands (Nederland)+31
          • New Caledonia (Nouvelle-Calédonie)+687
          • New Zealand+64
          • Nicaragua+505
          • Niger (Nijar)+227
          • Nigeria+234
          • Niue+683
          • Norfolk Island+672
          • North Korea (조선 민주주의 인민 공화국)+850
          • Northern Mariana Islands+1670
          • Norway (Norge)+47
          • Oman (‫عُمان‬‎)+968
          • Pakistan (‫پاکستان‬‎)+92
          • Palau+680
          • Palestine (‫فلسطين‬‎)+970
          • Panama (Panamá)+507
          • Papua New Guinea+675
          • Paraguay+595
          • Peru (Perú)+51
          • Philippines+63
          • Poland (Polska)+48
          • Portugal+351
          • Puerto Rico+1
          • Qatar (‫قطر‬‎)+974
          • Réunion (La Réunion)+262
          • Romania (România)+40
          • Russia (Россия)+7
          • Rwanda+250
          • Saint Barthélemy+590
          • Saint Helena+290
          • Saint Kitts and Nevis+1869
          • Saint Lucia+1758
          • Saint Martin (Saint-Martin (partie française))+590
          • Saint Pierre and Miquelon (Saint-Pierre-et-Miquelon)+508
          • Saint Vincent and the Grenadines+1784
          • Samoa+685
          • San Marino+378
          • São Tomé and Príncipe (São Tomé e Príncipe)+239
          • Saudi Arabia (‫المملكة العربية السعودية‬‎)+966
          • Senegal (Sénégal)+221
          • Serbia (Србија)+381
          • Seychelles+248
          • Sierra Leone+232
          • Singapore+65
          • Sint Maarten+1721
          • Slovakia (Slovensko)+421
          • Slovenia (Slovenija)+386
          • Solomon Islands+677
          • Somalia (Soomaaliya)+252
          • South Africa+27
          • South Korea (대한민국)+82
          • South Sudan (‫جنوب السودان‬‎)+211
          • Spain (España)+34
          • Sri Lanka (ශ්‍රී ලංකාව)+94
          • Sudan (‫السودان‬‎)+249
          • Suriname+597
          • Svalbard and Jan Mayen+47
          • Swaziland+268
          • Sweden (Sverige)+46
          • Switzerland (Schweiz)+41
          • Syria (‫سوريا‬‎)+963
          • Taiwan (台灣)+886
          • Tajikistan+992
          • Tanzania+255
          • Thailand (ไทย)+66
          • Timor-Leste+670
          • Togo+228
          • Tokelau+690
          • Tonga+676
          • Trinidad and Tobago+1868
          • Tunisia (‫تونس‬‎)+216
          • Turkey (Türkiye)+90
          • Turkmenistan+993
          • Turks and Caicos Islands+1649
          • Tuvalu+688
          • U.S. Virgin Islands+1340
          • Uganda+256
          • Ukraine (Україна)+380
          • United Arab Emirates (‫الإمارات العربية المتحدة‬‎)+971
          • United Kingdom+44
          • United States+1
          • Uruguay+598
          • Uzbekistan (Oʻzbekiston)+998
          • Vanuatu+678
          • Vatican City (Città del Vaticano)+39
          • Venezuela+58
          • Vietnam (Việt Nam)+84
          • Wallis and Futuna (Wallis-et-Futuna)+681
          • Western Sahara (‫الصحراء الغربية‬‎)+212
          • Yemen (‫اليمن‬‎)+967
          • Zambia+260
          • Zimbabwe+263
          • Åland Islands+358

          Success!!

          Keep an eye on your inbox for the PDF, it's on its way!

          If you don't see it in your inbox, don't forget to give your junk folder a quick peek. Just in case.









              You have successfully subscribed to the newsletter

              There was an error while trying to send your request. Please try again.

              Zehntech will use the information you provide on this form to be in touch with you and to provide updates and marketing.
              Read