https://webonyx.github.io/graphql-php/getting-started/

Submitted URL:
https://webonyx.github.io/graphql-php/getting-started/
Report Finished:

The outgoing links identified from the page

LinkText
https://github.com/webonyx/graphql-php webonyx/graphql-phpv15.14.24.6k561
https://graphql.org/learn/the official website
https://getcomposer.org/doc/00-intro.mdcomposer
https://github.com/webonyx/graphql-php/blob/master/UPGRADE.mdupgrade instructions
https://github.com/graphql/graphiqlthe GraphiQL
https://chrome.google.com/webstore/detail/chromeiql/fkkiamalmpiidkljmicmjfbieiclmeijChromeiQL
https://chrome.google.com/webstore/detail/graphiql-feen/mcbfdonlkfpbfdpimkjilhdneikhfklpGraphiQL Feen
https://github.com/webonyx/graphql-php/blob/master/examples/00-hello-worldsource code
https://github.com/webonyx/graphql-php/blob/master/examples/01-blogthe blog example
https://github.com/webonyx/graphql-php/tree/master/examples/01-blogblog example

JavaScript Variables · 19 found

Global JavaScript variables loaded on the window object of a page, are variables declared outside of functions and accessible from anywhere in the code within the current scope

NameType
onbeforetoggleobject
documentPictureInPictureobject
onscrollendobject
__md_scopeobject
__md_hashfunction
__md_getfunction
__md_setfunction
applyFocusVisiblePolyfillfunction
IFrameWorkerfunction
document$object

Console log messages · 1 found

Messages logged to the web console

TypeCategoryLog
warningother
Text
Error with Permissions-Policy header: Origin trial controlled feature not enabled: 'interest-cohort'.

HTML

The raw HTML body of the page

<!DOCTYPE html><html lang="en" class="js-focus-visible js" data-js-focus-visible=""><head>
    
      <meta charset="utf-8">
      <meta name="viewport" content="width=device-width,initial-scale=1">
      
        <meta name="description" content="PHP implementation of the GraphQL specification">
      
      
      
      
        <link rel="prev" href="..">
      
      
        <link rel="next" href="../concepts/">
      
      <link rel="icon" href="../assets/images/favicon.png">
      <meta name="generator" content="mkdocs-1.4.2, mkdocs-material-9.0.6">
    
    
      
        <title>Getting Started - graphql-php</title>
      
    
    
      <link rel="stylesheet" href="../assets/stylesheets/main.558e4712.min.css">
      
        
        <link rel="stylesheet" href="../assets/stylesheets/palette.2505c338.min.css">
      
      

    
    
    
      
        
        
        <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin="">
        <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Roboto:300,300i,400,400i,700,700i%7CRoboto+Mono:400,400i,700,700i&amp;display=fallback">
        <style>:root{--md-text-font:"Roboto";--md-code-font:"Roboto Mono"}</style>
      
    
    
    <script>__md_scope=new URL("..",location),__md_hash=e=>[...e].reduce((e,_)=>(e<<5)-e+_.charCodeAt(0),0),__md_get=(e,_=localStorage,t=__md_scope)=>JSON.parse(_.getItem(t.pathname+"."+e)),__md_set=(e,_,t=localStorage,a=__md_scope)=>{try{t.setItem(a.pathname+"."+e,JSON.stringify(_))}catch(e){}}</script>
    
      

    
    
    
  </head>
  
  
    
    
    
    
    
    <body dir="ltr" data-md-color-scheme="default" data-md-color-primary="" data-md-color-accent="">
  
    
    
    <input class="md-toggle" data-md-toggle="drawer" type="checkbox" id="__drawer" autocomplete="off">
    <input class="md-toggle" data-md-toggle="search" type="checkbox" id="__search" autocomplete="off">
    <label class="md-overlay" for="__drawer"></label>
    <div data-md-component="skip">
      
        
        <a href="#prerequisites" class="md-skip">
          Skip to content
        </a>
      
    </div>
    <div data-md-component="announce">
      
    </div>
    
    
      

<header class="md-header md-header--shadow" data-md-component="header">
  <nav class="md-header__inner md-grid" aria-label="Header">
    <a href=".." title="graphql-php" class="md-header__button md-logo" aria-label="graphql-php" data-md-component="logo">
      
  
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"></path></svg>

    </a>
    <label class="md-header__button md-icon" for="__drawer">
      <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M3 6h18v2H3V6m0 5h18v2H3v-2m0 5h18v2H3v-2Z"></path></svg>
    </label>
    <div class="md-header__title" data-md-component="header-title">
      <div class="md-header__ellipsis">
        <div class="md-header__topic">
          <span class="md-ellipsis">
            graphql-php
          </span>
        </div>
        <div class="md-header__topic" data-md-component="header-topic">
          <span class="md-ellipsis">
            
              Getting Started
            
          </span>
        </div>
      </div>
    </div>
    
    
    
      <label class="md-header__button md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
      </label>
      <div class="md-search" data-md-component="search" role="dialog">
  <label class="md-search__overlay" for="__search"></label>
  <div class="md-search__inner" role="search">
    <form class="md-search__form" name="search">
      <input type="text" class="md-search__input" name="query" aria-label="Search" placeholder="Search" autocapitalize="off" autocorrect="off" autocomplete="off" spellcheck="false" data-md-component="search-query" required="">
      <label class="md-search__icon md-icon" for="__search">
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M9.5 3A6.5 6.5 0 0 1 16 9.5c0 1.61-.59 3.09-1.56 4.23l.27.27h.79l5 5-1.5 1.5-5-5v-.79l-.27-.27A6.516 6.516 0 0 1 9.5 16 6.5 6.5 0 0 1 3 9.5 6.5 6.5 0 0 1 9.5 3m0 2C7 5 5 7 5 9.5S7 14 9.5 14 14 12 14 9.5 12 5 9.5 5Z"></path></svg>
        <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M20 11v2H8l5.5 5.5-1.42 1.42L4.16 12l7.92-7.92L13.5 5.5 8 11h12Z"></path></svg>
      </label>
      <nav class="md-search__options" aria-label="Search">
        
        <button type="reset" class="md-search__icon md-icon" title="Clear" aria-label="Clear" tabindex="-1">
          <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M19 6.41 17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12 19 6.41Z"></path></svg>
        </button>
      </nav>
      
    </form>
    <div class="md-search__output">
      <div class="md-search__scrollwrap">
        <div class="md-search-result" data-md-component="search-result">
          <div class="md-search-result__meta">Type to start searching</div>
          <ol class="md-search-result__list" role="presentation"></ol>
        </div>
      </div>
    </div>
  </div>
</div>
    
    
      <div class="md-header__source">
        <a href="https://github.com/webonyx/graphql-php" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
  </div>
  <div class="md-source__repository md-source__repository--active">
    webonyx/graphql-php
  <ul class="md-source__facts"><li class="md-source__fact md-source__fact--version">v15.14.2</li><li class="md-source__fact md-source__fact--stars">4.6k</li><li class="md-source__fact md-source__fact--forks">561</li></ul></div>
</a>
      </div>
    
  </nav>
  
</header>
    
    <div class="md-container" data-md-component="container">
      
      
        
          
        
      
      <main class="md-main" data-md-component="main">
        <div class="md-main__inner md-grid">
          
            
              
              <div class="md-sidebar md-sidebar--primary" data-md-component="sidebar" data-md-type="navigation">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    


<nav class="md-nav md-nav--primary" aria-label="Navigation" data-md-level="0">
  <label class="md-nav__title" for="__drawer">
    <a href=".." title="graphql-php" class="md-nav__button md-logo" aria-label="graphql-php" data-md-component="logo">
      
  
  <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><path d="M12 8a3 3 0 0 0 3-3 3 3 0 0 0-3-3 3 3 0 0 0-3 3 3 3 0 0 0 3 3m0 3.54C9.64 9.35 6.5 8 3 8v11c3.5 0 6.64 1.35 9 3.54 2.36-2.19 5.5-3.54 9-3.54V8c-3.5 0-6.64 1.35-9 3.54Z"></path></svg>

    </a>
    graphql-php
  </label>
  
    <div class="md-nav__source">
      <a href="https://github.com/webonyx/graphql-php" title="Go to repository" class="md-source" data-md-component="source">
  <div class="md-source__icon md-icon">
    
    <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 448 512"><!--! Font Awesome Free 6.2.1 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) Copyright 2022 Fonticons, Inc.--><path d="M439.55 236.05 244 40.45a28.87 28.87 0 0 0-40.81 0l-40.66 40.63 51.52 51.52c27.06-9.14 52.68 16.77 43.39 43.68l49.66 49.66c34.23-11.8 61.18 31 35.47 56.69-26.49 26.49-70.21-2.87-56-37.34L240.22 199v121.85c25.3 12.54 22.26 41.85 9.08 55a34.34 34.34 0 0 1-48.55 0c-17.57-17.6-11.07-46.91 11.25-56v-123c-20.8-8.51-24.6-30.74-18.64-45L142.57 101 8.45 235.14a28.86 28.86 0 0 0 0 40.81l195.61 195.6a28.86 28.86 0 0 0 40.8 0l194.69-194.69a28.86 28.86 0 0 0 0-40.81z"></path></svg>
  </div>
  <div class="md-source__repository md-source__repository--active">
    webonyx/graphql-php
  <ul class="md-source__facts"><li class="md-source__fact md-source__fact--version">v15.14.2</li><li class="md-source__fact md-source__fact--stars">4.6k</li><li class="md-source__fact md-source__fact--forks">561</li></ul></div>
</a>
    </div>
  
  <ul class="md-nav__list">
    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href=".." class="md-nav__link">
        About
      </a>
    </li>
  

    
      
      
      

  
  
    
  
  
    <li class="md-nav__item md-nav__item--active">
      
      <input class="md-nav__toggle md-toggle" data-md-toggle="toc" type="checkbox" id="__toc">
      
      
      
        <label class="md-nav__link md-nav__link--active" for="__toc">
          Getting Started
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <a href="./" class="md-nav__link md-nav__link--active">
        Getting Started
      </a>
      
        

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc">
      
        <li class="md-nav__item">
  <a href="#prerequisites" class="md-nav__link">
    Prerequisites
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#installation" class="md-nav__link">
    Installation
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#upgrading" class="md-nav__link">
    Upgrading
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#install-tools-optional" class="md-nav__link">
    Install Tools (optional)
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#hello-world" class="md-nav__link">
    Hello World
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#next-steps" class="md-nav__link">
    Next Steps
  </a>
  
</li>
      
    </ul>
  
</nav>
      
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../concepts/" class="md-nav__link">
        Concepts
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../complementary-tools/" class="md-nav__link">
        Complementary Tools
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../schema-definition/" class="md-nav__link">
        Schema Definition
      </a>
    </li>
  

    
      
      
      

  
  
  
    
    <li class="md-nav__item md-nav__item--nested">
      
      
      
      
      <input class="md-nav__toggle md-toggle " data-md-toggle="__nav_6" type="checkbox" id="__nav_6">
      
      
      
        <label class="md-nav__link" for="__nav_6" tabindex="0" aria-expanded="false">
          Type Definitions
          <span class="md-nav__icon md-icon"></span>
        </label>
      
      <nav class="md-nav" aria-label="Type Definitions" data-md-level="1">
        <label class="md-nav__title" for="__nav_6">
          <span class="md-nav__icon md-icon"></span>
          Type Definitions
        </label>
        <ul class="md-nav__list">
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/" class="md-nav__link">
        Introduction
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/object-types/" class="md-nav__link">
        Object Types
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/scalars/" class="md-nav__link">
        Scalars
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/enums/" class="md-nav__link">
        Enums
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/lists-and-nonnulls/" class="md-nav__link">
        Lists and Non-Nulls
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/interfaces/" class="md-nav__link">
        Interfaces
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/unions/" class="md-nav__link">
        Unions
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/inputs/" class="md-nav__link">
        Inputs
      </a>
    </li>
  

            
          
            
              
  
  
  
    <li class="md-nav__item">
      <a href="../type-definitions/directives/" class="md-nav__link">
        Directives
      </a>
    </li>
  

            
          
        </ul>
      </nav>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../schema-definition-language/" class="md-nav__link">
        Schema Definition Language
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../executing-queries/" class="md-nav__link">
        Executing Queries
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../data-fetching/" class="md-nav__link">
        Fetching Data
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../error-handling/" class="md-nav__link">
        Handling Errors
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../security/" class="md-nav__link">
        Security
      </a>
    </li>
  

    
      
      
      

  
  
  
    <li class="md-nav__item">
      <a href="../class-reference/" class="md-nav__link">
        Class Reference
      </a>
    </li>
  

    
  </ul>
</nav>
                  </div>
                </div>
              </div>
            
            
              
              <div class="md-sidebar md-sidebar--secondary" data-md-component="sidebar" data-md-type="toc">
                <div class="md-sidebar__scrollwrap">
                  <div class="md-sidebar__inner">
                    

<nav class="md-nav md-nav--secondary" aria-label="Table of contents">
  
  
  
  
    <label class="md-nav__title" for="__toc">
      <span class="md-nav__icon md-icon"></span>
      Table of contents
    </label>
    <ul class="md-nav__list" data-md-component="toc">
      
        <li class="md-nav__item">
  <a href="#prerequisites" class="md-nav__link">
    Prerequisites
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#installation" class="md-nav__link">
    Installation
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#upgrading" class="md-nav__link">
    Upgrading
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#install-tools-optional" class="md-nav__link">
    Install Tools (optional)
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#hello-world" class="md-nav__link">
    Hello World
  </a>
  
</li>
      
        <li class="md-nav__item">
  <a href="#next-steps" class="md-nav__link">
    Next Steps
  </a>
  
</li>
      
    </ul>
  
</nav>
                  </div>
                </div>
              </div>
            
          
          
            <div class="md-content" data-md-component="content">
              <article class="md-content__inner md-typeset">
                
                  

  
  



  <h1>Getting Started</h1>

<h2 id="prerequisites">Prerequisites<a class="headerlink" href="#prerequisites" title="Permanent link">¶</a></h2>
<p>This documentation assumes your familiarity with GraphQL concepts. If it is not the case -
first learn about GraphQL on <a href="https://graphql.org/learn/">the official website</a>.</p>
<h2 id="installation">Installation<a class="headerlink" href="#installation" title="Permanent link">¶</a></h2>
<p>Using <a href="https://getcomposer.org/doc/00-intro.md">composer</a>, run:</p>
<div class="highlight"><pre><span></span><code>composer<span class="w"> </span>require<span class="w"> </span>webonyx/graphql-php
</code></pre></div>
<h2 id="upgrading">Upgrading<a class="headerlink" href="#upgrading" title="Permanent link">¶</a></h2>
<p>We try to keep library releases backwards compatible when possible.
For breaking changes we provide <a href="https://github.com/webonyx/graphql-php/blob/master/UPGRADE.md">upgrade instructions</a>.</p>
<h2 id="install-tools-optional">Install Tools (optional)<a class="headerlink" href="#install-tools-optional" title="Permanent link">¶</a></h2>
<p>While it is possible to communicate with GraphQL API using regular HTTP tools it is way
more convenient for humans to use <a href="https://github.com/graphql/graphiql">GraphiQL</a> - an in-browser
IDE for exploring GraphQL APIs.</p>
<p>It provides syntax-highlighting, auto-completion and auto-generated documentation for
GraphQL API.</p>
<p>The easiest way to use it is to install one of the existing Google Chrome extensions:</p>
<ul>
<li><a href="https://chrome.google.com/webstore/detail/chromeiql/fkkiamalmpiidkljmicmjfbieiclmeij">ChromeiQL</a></li>
<li><a href="https://chrome.google.com/webstore/detail/graphiql-feen/mcbfdonlkfpbfdpimkjilhdneikhfklp">GraphiQL Feen</a></li>
</ul>
<p>Alternatively, you can follow instructions on <a href="https://github.com/graphql/graphiql">the GraphiQL</a>
page and install it locally.</p>
<h2 id="hello-world">Hello World<a class="headerlink" href="#hello-world" title="Permanent link">¶</a></h2>
<p>Let's create a type system that will be capable to process the following simple query:</p>
<div class="highlight"><pre><span></span><code>query {
  echo(message: "Hello World")
}
</code></pre></div>
<p>We need an object type with the field <code>echo</code>:</p>
<div class="highlight"><pre><span></span><code tabindex="0"><span class="k">use</span> <span class="nx">GraphQL\Type\Definition\ObjectType</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">GraphQL\Type\Definition\Type</span><span class="p">;</span>

<span class="nv">$queryType</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">ObjectType</span><span class="p">([</span>
    <span class="s1">'name'</span> <span class="o">=&gt;</span> <span class="s1">'Query'</span><span class="p">,</span>
    <span class="s1">'fields'</span> <span class="o">=&gt;</span> <span class="p">[</span>
        <span class="s1">'echo'</span> <span class="o">=&gt;</span> <span class="p">[</span>
            <span class="s1">'type'</span> <span class="o">=&gt;</span> <span class="nx">Type</span><span class="o">::</span><span class="na">string</span><span class="p">(),</span>
            <span class="s1">'args'</span> <span class="o">=&gt;</span> <span class="p">[</span>
                <span class="s1">'message'</span> <span class="o">=&gt;</span> <span class="nx">Type</span><span class="o">::</span><span class="na">nonNull</span><span class="p">(</span><span class="nx">Type</span><span class="o">::</span><span class="na">string</span><span class="p">()),</span>
            <span class="p">],</span>
            <span class="s1">'resolve'</span> <span class="o">=&gt;</span> <span class="nx">fn</span> <span class="p">(</span><span class="nv">$rootValue</span><span class="p">,</span> <span class="k">array</span> <span class="nv">$args</span><span class="p">)</span><span class="o">:</span> <span class="nx">string</span> <span class="o">=&gt;</span> <span class="nv">$rootValue</span><span class="p">[</span><span class="s1">'prefix'</span><span class="p">]</span> <span class="o">.</span> <span class="nv">$args</span><span class="p">[</span><span class="s1">'message'</span><span class="p">],</span>
        <span class="p">],</span>
    <span class="p">],</span>
<span class="p">]);</span>
</code></pre></div>
<p>(Note: type definition can be expressed in <a href="../type-definitions/#definition-styles">different styles</a>)</p>
<p>The interesting piece here is the <strong>resolve</strong> option of the field definition. It is responsible for returning
a value of our field. Values of <strong>scalar</strong> fields will be directly included in the response while values of
<strong>composite</strong> fields (objects, interfaces, unions) will be passed down to nested field resolvers
(not in this example though).</p>
<p>Now when our type is ready, let's create a GraphQL endpoint file for it <strong>graphql.php</strong>:</p>
<div class="highlight"><pre><span></span><code><span class="k">use</span> <span class="nx">GraphQL\GraphQL</span><span class="p">;</span>
<span class="k">use</span> <span class="nx">GraphQL\Type\Schema</span><span class="p">;</span>

<span class="nv">$schema</span> <span class="o">=</span> <span class="k">new</span> <span class="nx">Schema</span><span class="p">([</span>
    <span class="s1">'query'</span> <span class="o">=&gt;</span> <span class="nv">$queryType</span>
<span class="p">]);</span>

<span class="nv">$rawInput</span> <span class="o">=</span> <span class="nb">file_get_contents</span><span class="p">(</span><span class="s1">'php://input'</span><span class="p">);</span>
<span class="nv">$input</span> <span class="o">=</span> <span class="nb">json_decode</span><span class="p">(</span><span class="nv">$rawInput</span><span class="p">,</span> <span class="k">true</span><span class="p">);</span>
<span class="nv">$query</span> <span class="o">=</span> <span class="nv">$input</span><span class="p">[</span><span class="s1">'query'</span><span class="p">];</span>
<span class="nv">$variableValues</span> <span class="o">=</span> <span class="nb">isset</span><span class="p">(</span><span class="nv">$input</span><span class="p">[</span><span class="s1">'variables'</span><span class="p">])</span> <span class="o">?</span> <span class="nv">$input</span><span class="p">[</span><span class="s1">'variables'</span><span class="p">]</span> <span class="o">:</span> <span class="k">null</span><span class="p">;</span>

<span class="k">try</span> <span class="p">{</span>
    <span class="nv">$rootValue</span> <span class="o">=</span> <span class="p">[</span><span class="s1">'prefix'</span> <span class="o">=&gt;</span> <span class="s1">'You said: '</span><span class="p">];</span>
    <span class="nv">$result</span> <span class="o">=</span> <span class="nx">GraphQL</span><span class="o">::</span><span class="na">executeQuery</span><span class="p">(</span><span class="nv">$schema</span><span class="p">,</span> <span class="nv">$query</span><span class="p">,</span> <span class="nv">$rootValue</span><span class="p">,</span> <span class="k">null</span><span class="p">,</span> <span class="nv">$variableValues</span><span class="p">);</span>
    <span class="nv">$output</span> <span class="o">=</span> <span class="nv">$result</span><span class="o">-&gt;</span><span class="na">toArray</span><span class="p">();</span>
<span class="p">}</span> <span class="k">catch</span> <span class="p">(</span><span class="nx">\Exception</span> <span class="nv">$e</span><span class="p">)</span> <span class="p">{</span>
    <span class="nv">$output</span> <span class="o">=</span> <span class="p">[</span>
        <span class="s1">'errors'</span> <span class="o">=&gt;</span> <span class="p">[</span>
            <span class="p">[</span>
                <span class="s1">'message'</span> <span class="o">=&gt;</span> <span class="nv">$e</span><span class="o">-&gt;</span><span class="na">getMessage</span><span class="p">()</span>
            <span class="p">]</span>
        <span class="p">]</span>
    <span class="p">];</span>
<span class="p">}</span>
<span class="nb">header</span><span class="p">(</span><span class="s1">'Content-Type: application/json'</span><span class="p">);</span>
<span class="k">echo</span> <span class="nb">json_encode</span><span class="p">(</span><span class="nv">$output</span><span class="p">,</span> <span class="nx">JSON_THROW_ON_ERROR</span><span class="p">);</span>
</code></pre></div>
<p>Our example is finished. Try it by running:</p>
<div class="highlight"><pre><span></span><code>php<span class="w"> </span>-S<span class="w"> </span>localhost:8080<span class="w"> </span>graphql.php
curl<span class="w"> </span>http://localhost:8080<span class="w"> </span>-d<span class="w"> </span><span class="s1">'{"query": "query { echo(message: \"Hello World\") }" }'</span>
</code></pre></div>
<p>Check out the full <a href="https://github.com/webonyx/graphql-php/blob/master/examples/00-hello-world">source code</a> of this example
which also includes simple mutation.</p>
<p>Check out <a href="https://github.com/webonyx/graphql-php/blob/master/examples/01-blog">the blog example</a> for something
which is closer to real-world apps or read about the details of <a href="../schema-definition/">schema definition</a>.</p>
<h2 id="next-steps">Next Steps<a class="headerlink" href="#next-steps" title="Permanent link">¶</a></h2>
<p>Obviously hello world only scratches the surface of what is possible.</p>
<p>To learn by example, check out the <a href="https://github.com/webonyx/graphql-php/tree/master/examples/01-blog">blog example</a>
which is quite close to real-world GraphQL hierarchies.</p>
<p>For a deeper understanding of GraphQL in general, check out <a href="../concepts/">concepts</a>.</p>
<p>To delve right into the implementation, see <a href="../schema-definition/">schema definition</a>.</p>





                
              </article>
            </div>
          
          
        </div>
        
      </main>
      
        <footer class="md-footer">
  
  <div class="md-footer-meta md-typeset">
    <div class="md-footer-meta__inner md-grid">
      <div class="md-copyright">
  
  
    Made with
    <a href="https://squidfunk.github.io/mkdocs-material/" target="_blank" rel="noopener">
      Material for MkDocs
    </a>
  
</div>
      
    </div>
  </div>
</footer>
      
    </div>
    <div class="md-dialog" data-md-component="dialog">
      <div class="md-dialog__inner md-typeset"></div>
    </div>
    
    <script id="__config" type="application/json">{"base": "..", "features": [], "search": "../assets/javascripts/workers/search.e5c33ebb.min.js", "translations": {"clipboard.copied": "Copied to clipboard", "clipboard.copy": "Copy to clipboard", "search.result.more.one": "1 more on this page", "search.result.more.other": "# more on this page", "search.result.none": "No matching documents", "search.result.one": "1 matching document", "search.result.other": "# matching documents", "search.result.placeholder": "Type to start searching", "search.result.term.missing": "Missing", "select.version": "Select version"}}</script>
    
    
      <script src="../assets/javascripts/bundle.51d95adb.min.js"></script>
      
    
  
</body></html>