- Scan ID:
- 95268170-50ad-43dd-925a-aaa3e47022ddFinished
- Submitted URL:
- https://webonyx.github.io/graphql-php/getting-started/
- Report Finished:
Links · 11 found
The outgoing links identified from the page
Link | Text |
---|---|
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.md | composer |
https://github.com/webonyx/graphql-php/blob/master/UPGRADE.md | upgrade instructions |
https://github.com/graphql/graphiql | the GraphiQL |
https://chrome.google.com/webstore/detail/chromeiql/fkkiamalmpiidkljmicmjfbieiclmeij | ChromeiQL |
https://chrome.google.com/webstore/detail/graphiql-feen/mcbfdonlkfpbfdpimkjilhdneikhfklp | GraphiQL Feen |
https://github.com/webonyx/graphql-php/blob/master/examples/00-hello-world | source code |
https://github.com/webonyx/graphql-php/blob/master/examples/01-blog | the blog example |
https://github.com/webonyx/graphql-php/tree/master/examples/01-blog | blog 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
Name | Type |
---|---|
onbeforetoggle | object |
documentPictureInPicture | object |
onscrollend | object |
__md_scope | object |
__md_hash | function |
__md_get | function |
__md_set | function |
applyFocusVisiblePolyfill | function |
IFrameWorker | function |
document$ | object |
Console log messages · 1 found
Messages logged to the web console
Type | Category | Log |
---|---|---|
warning | other |
|
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&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">=></span> <span class="s1">'Query'</span><span class="p">,</span>
<span class="s1">'fields'</span> <span class="o">=></span> <span class="p">[</span>
<span class="s1">'echo'</span> <span class="o">=></span> <span class="p">[</span>
<span class="s1">'type'</span> <span class="o">=></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">=></span> <span class="p">[</span>
<span class="s1">'message'</span> <span class="o">=></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">=></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">=></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">=></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">=></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">-></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">=></span> <span class="p">[</span>
<span class="p">[</span>
<span class="s1">'message'</span> <span class="o">=></span> <span class="nv">$e</span><span class="o">-></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>