graphql-php/best-practices/index.html

286 lines
7.7 KiB
HTML
Executable File

<!DOCTYPE html>
<!--[if IE 8]><html class="no-js lt-ie9" lang="en" > <![endif]-->
<!--[if gt IE 8]><!--> <html class="no-js" lang="en" > <!--<![endif]-->
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Best Practices - graphql-php</title>
<link rel="shortcut icon" href="../img/favicon.ico">
<link href='https://fonts.googleapis.com/css?family=Lato:400,700|Roboto+Slab:400,700|Inconsolata:400,700' rel='stylesheet' type='text/css'>
<link rel="stylesheet" href="../css/theme.css" type="text/css" />
<link rel="stylesheet" href="../css/theme_extra.css" type="text/css" />
<link rel="stylesheet" href="../css/highlight.css">
<script>
// Current page data
var mkdocs_page_name = "Best Practices";
var mkdocs_page_input_path = "best-practices.md";
var mkdocs_page_url = "/best-practices/";
</script>
<script src="../js/jquery-2.1.1.min.js"></script>
<script src="../js/modernizr-2.8.3.min.js"></script>
<script type="text/javascript" src="../js/highlight.pack.js"></script>
<script src="../js/theme.js"></script>
</head>
<body class="wy-body-for-nav" role="document">
<div class="wy-grid-for-nav">
<nav data-toggle="wy-nav-shift" class="wy-nav-side stickynav">
<div class="wy-side-nav-search">
<a href=".." class="icon icon-home"> graphql-php</a>
<div role="search">
<form id ="rtd-search-form" class="wy-form" action="../search.html" method="get">
<input type="text" name="q" placeholder="Search docs" />
</form>
</div>
</div>
<div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation">
<ul class="current">
<li>
<li class="toctree-l1 ">
<a class="" href="..">About</a>
</li>
<li>
<li>
<li class="toctree-l1 ">
<a class="" href="../getting-started/">Getting Started</a>
</li>
<li>
<li>
<ul class="subnav">
<li><span>Type System</span></li>
<li class="toctree-l1 ">
<a class="" href="../type-system/">Introduction</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/object-types/">Object Types</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/scalar-types/">Scalar Types</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/enum-types/">Enumeration Types</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/lists-and-nonnulls/">Lists and Non-Null</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/interfaces/">Interfaces</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/unions/">Unions</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/input-types/">Input Types</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/directives/">Directives</a>
</li>
<li class="toctree-l1 ">
<a class="" href="../type-system/schema/">Schema</a>
</li>
</ul>
<li>
<li>
<li class="toctree-l1 ">
<a class="" href="../executing-queries/">Executing Queries</a>
</li>
<li>
<li>
<li class="toctree-l1 ">
<a class="" href="../error-handling/">Handling Errors</a>
</li>
<li>
<li>
<li class="toctree-l1 ">
<a class="" href="../data-fetching/">Fetching Data</a>
</li>
<li>
<li>
<li class="toctree-l1 current">
<a class="current" href="./">Best Practices</a>
<ul>
<li class="toctree-l3"><a href="#config-validation">Config Validation</a></li>
<li class="toctree-l3"><a href="#type-registry">Type Registry</a></li>
</ul>
</li>
<li>
<li>
<li class="toctree-l1 ">
<a class="" href="../complementary-tools/">Complementary Tools</a>
</li>
<li>
</ul>
</div>
&nbsp;
</nav>
<section data-toggle="wy-nav-shift" class="wy-nav-content-wrap">
<nav class="wy-nav-top" role="navigation" aria-label="top navigation">
<i data-toggle="wy-nav-top" class="fa fa-bars"></i>
<a href="..">graphql-php</a>
</nav>
<div class="wy-nav-content">
<div class="rst-content">
<div role="navigation" aria-label="breadcrumbs navigation">
<ul class="wy-breadcrumbs">
<li><a href="..">Docs</a> &raquo;</li>
<li>Best Practices</li>
<li class="wy-breadcrumbs-aside">
</li>
</ul>
<hr/>
</div>
<div role="main">
<div class="section">
<h1 id="config-validation">Config Validation</h1>
<p>Defining types using arrays may be error-prone, but <strong>graphql-php</strong> provides config validation
tool to report when config has unexpected structure. </p>
<p>This validation tool is <strong>disabled by default</strong> because it is time-consuming operation which only
makes sense during development.</p>
<p>To enable validation - call: <code>GraphQL\Type\Definition\Config::enableValidation();</code> in your bootstrap
but make sure to restrict it to debug/development mode only.</p>
<h1 id="type-registry">Type Registry</h1>
<p><strong>graphql-php</strong> expects that each type in Schema is presented with single instance. Therefore
if you define your types as separate PHP classes you need to ensure that each type is referenced only once.</p>
<p>Technically you can create several instances of your type (for example for tests), but <code>GraphQL\Schema</code>
will throw on attempt to add different instances with the same name.</p>
<p>There are several ways to achieve this depending on your preferences. We provide reference
implementation below that introduces TypeRegistry class:</p>
</div>
</div>
<footer>
<div class="rst-footer-buttons" role="navigation" aria-label="footer navigation">
<a href="../complementary-tools/" class="btn btn-neutral float-right" title="Complementary Tools">Next <span class="icon icon-circle-arrow-right"></span></a>
<a href="../data-fetching/" class="btn btn-neutral" title="Fetching Data"><span class="icon icon-circle-arrow-left"></span> Previous</a>
</div>
<hr/>
<div role="contentinfo">
<!-- Copyright etc -->
</div>
Built with <a href="http://www.mkdocs.org">MkDocs</a> using a <a href="https://github.com/snide/sphinx_rtd_theme">theme</a> provided by <a href="https://readthedocs.org">Read the Docs</a>.
</footer>
</div>
</div>
</section>
</div>
<div class="rst-versions" role="note" style="cursor: pointer">
<span class="rst-current-version" data-toggle="rst-current-version">
<span><a href="../data-fetching/" style="color: #fcfcfc;">&laquo; Previous</a></span>
<span style="margin-left: 15px"><a href="../complementary-tools/" style="color: #fcfcfc">Next &raquo;</a></span>
</span>
</div>
</body>
</html>