This commit is contained in:
tanner0101 2017-06-20 14:27:06 +01:00
parent a2ccd99d2f
commit 28d2ef149d
4 changed files with 188 additions and 99 deletions

View File

@ -1748,7 +1748,8 @@
<p>Now you can simply return <code>user.makeJSON()</code> in your routes.</p>
<div class="codehilite"><pre><span></span><span class="n">drop</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s">&quot;users&quot;</span><span class="p">,</span> <span class="n">User</span><span class="p">.</span><span class="kd">init</span><span class="p">)</span> <span class="p">{</span> <span class="n">req</span><span class="p">,</span> <span class="n">user</span> <span class="k">in</span>
<div class="codehilite"><pre><span></span><span class="n">drop</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s">&quot;users&quot;</span><span class="p">,</span> <span class="n">User</span><span class="p">.</span><span class="n">parameter</span><span class="p">)</span> <span class="p">{</span> <span class="n">req</span> <span class="k">in</span>
<span class="kd">let</span> <span class="nv">user</span> <span class="p">=</span> <span class="k">try</span> <span class="n">req</span><span class="p">.</span><span class="n">parameters</span><span class="p">.</span><span class="n">next</span><span class="p">(</span><span class="n">User</span><span class="p">.</span><span class="kc">self</span><span class="p">)</span>
<span class="k">return</span> <span class="k">try</span> <span class="n">user</span><span class="p">.</span><span class="n">makeJSON</span><span class="p">()</span>
<span class="p">}</span>
</pre></div>
@ -1761,7 +1762,8 @@ you will get the conformance for free.</p>
<p>Now you can return the model by itself. It will automatically call <code>.makeJSON()</code>.</p>
<div class="codehilite"><pre><span></span><span class="n">drop</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s">&quot;users&quot;</span><span class="p">,</span> <span class="n">User</span><span class="p">.</span><span class="kd">init</span><span class="p">)</span> <span class="p">{</span> <span class="n">req</span><span class="p">,</span> <span class="n">user</span> <span class="k">in</span>
<div class="codehilite"><pre><span></span><span class="n">drop</span><span class="p">.</span><span class="kr">get</span><span class="p">(</span><span class="s">&quot;users&quot;</span><span class="p">,</span> <span class="n">User</span><span class="p">.</span><span class="n">parameter</span><span class="p">)</span> <span class="p">{</span> <span class="n">req</span> <span class="k">in</span>
<span class="kd">let</span> <span class="nv">user</span> <span class="p">=</span> <span class="k">try</span> <span class="n">req</span><span class="p">.</span><span class="n">parameters</span><span class="p">.</span><span class="n">next</span><span class="p">(</span><span class="n">User</span><span class="p">.</span><span class="kc">self</span><span class="p">)</span>
<span class="k">return</span> <span class="k">try</span> <span class="n">user</span>
<span class="p">}</span>
</pre></div>

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
<url>
<loc>/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -13,37 +13,37 @@
<url>
<loc>/getting-started/install-on-macos/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/getting-started/install-on-ubuntu/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/getting-started/toolbox/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/getting-started/hello-world/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/getting-started/manual/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/getting-started/xcode/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -53,49 +53,49 @@
<url>
<loc>/vapor/folder-structure/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/vapor/droplet/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/vapor/views/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/vapor/controllers/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/vapor/provider/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/vapor/hash/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/vapor/log/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/vapor/commands/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -105,7 +105,7 @@
<url>
<loc>/configs/config/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -115,13 +115,13 @@
<url>
<loc>/json/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/json/overview/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -131,31 +131,31 @@
<url>
<loc>/routing/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/routing/overview/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/routing/parameters/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/routing/group/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/routing/collection/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -165,37 +165,37 @@
<url>
<loc>/fluent/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/fluent/getting-started/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/fluent/model/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/fluent/database/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/fluent/query/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/fluent/relations/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -205,13 +205,13 @@
<url>
<loc>/cache/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/cache/overview/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -221,19 +221,19 @@
<url>
<loc>/mysql/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/mysql/provider/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/mysql/driver/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -243,13 +243,13 @@
<url>
<loc>/redis/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/redis/provider/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -259,37 +259,37 @@
<url>
<loc>/auth/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/auth/provider/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/auth/getting-started/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/auth/helper/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/auth/password/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/auth/persist/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -299,13 +299,13 @@
<url>
<loc>/sessions/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/sessions/sessions/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -315,61 +315,61 @@
<url>
<loc>/http/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/request/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/response/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/middleware/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/body/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/response-representable/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/responder/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/client/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/server/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/http/cors/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -379,19 +379,19 @@
<url>
<loc>/leaf/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/leaf/provider/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/leaf/leaf/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -401,13 +401,13 @@
<url>
<loc>/validation/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/validation/overview/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -417,13 +417,13 @@
<url>
<loc>/node/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/node/getting-started/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -433,13 +433,13 @@
<url>
<loc>/core/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/core/overview/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -449,13 +449,13 @@
<url>
<loc>/bits/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/bits/overview/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -465,13 +465,13 @@
<url>
<loc>/debugging/package/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/debugging/overview/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -481,13 +481,13 @@
<url>
<loc>/deploy/nginx/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/deploy/supervisor/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
@ -497,19 +497,19 @@
<url>
<loc>/version/1_5/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/version/2_0/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>
<url>
<loc>/version/support/</loc>
<lastmod>2017-06-19</lastmod>
<lastmod>2017-06-20</lastmod>
<changefreq>daily</changefreq>
</url>

View File

@ -407,6 +407,19 @@
Resources
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#actions" title="Actions" class="md-nav__link">
Actions
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1644,6 +1657,19 @@
Resources
</a>
<nav class="md-nav">
<ul class="md-nav__list">
<li class="md-nav__item">
<a href="#actions" title="Actions" class="md-nav__link">
Actions
</a>
</li>
</ul>
</nav>
</li>
<li class="md-nav__item">
@ -1758,27 +1784,8 @@
</pre></div>
<p>Conforming <code>UserController</code> to <code>ResourceRepresentable</code> requires that the signatures of the <code>index</code> and <code>show</code> methods match what the <code>Resource&lt;User&gt;</code> is expecting.</p>
<p>Here is a peek into the <code>Resource</code> class.</p>
<div class="codehilite"><pre><span></span><span class="kr">final</span> <span class="kd">class</span> <span class="nc">Resource</span><span class="p">&lt;</span><span class="n">Model</span><span class="p">:</span> <span class="n">StringInitializable</span><span class="p">&gt;</span> <span class="p">{</span>
<span class="kd">typealias</span> <span class="n">Multiple</span> <span class="p">=</span> <span class="p">(</span><span class="n">Request</span><span class="p">)</span> <span class="kr">throws</span> <span class="p">-&gt;</span> <span class="n">ResponseRepresentable</span>
<span class="kd">typealias</span> <span class="n">Item</span> <span class="p">=</span> <span class="p">(</span><span class="n">Request</span><span class="p">,</span> <span class="n">Model</span><span class="p">)</span> <span class="kr">throws</span> <span class="p">-&gt;</span> <span class="n">ResponseRepresentable</span>
<span class="kd">var</span> <span class="nv">index</span><span class="p">:</span> <span class="n">Multiple</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">store</span><span class="p">:</span> <span class="n">Multiple</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">show</span><span class="p">:</span> <span class="n">Item</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">replace</span><span class="p">:</span> <span class="n">Item</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">modify</span><span class="p">:</span> <span class="n">Item</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">destroy</span><span class="p">:</span> <span class="n">Item</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">clear</span><span class="p">:</span> <span class="n">Multiple</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">aboutItem</span><span class="p">:</span> <span class="n">Item</span><span class="p">?</span>
<span class="kd">var</span> <span class="nv">aboutMultiple</span><span class="p">:</span> <span class="n">Multiple</span><span class="p">?</span>
<span class="p">...</span>
<span class="p">}</span>
</pre></div>
<p>Conforming <code>UserController</code> to <code>ResourceRepresentable</code> requires that the signatures of
the <code>index</code> and <code>show</code> methods match what the <code>Resource&lt;User&gt;</code> is expecting.</p>
<p>Now that <code>UserController</code> conforms to <code>ResourceRepresentable</code>, registering the routes is easy.</p>
<div class="codehilite"><pre><span></span><span class="kd">let</span> <span class="nv">users</span> <span class="p">=</span> <span class="n">UserController</span><span class="p">()</span>
<span class="n">drop</span><span class="p">.</span><span class="n">resource</span><span class="p">(</span><span class="s">&quot;users&quot;</span><span class="p">,</span> <span class="n">users</span><span class="p">)</span>
@ -1790,6 +1797,81 @@
<p class="admonition-title">Note</p>
<p><code>drop.resource</code> also adds useful defaults for OPTIONS requests. These can be overriden. </p>
</div>
<h3 id="actions">Actions<a class="headerlink" href="#actions" title="Permanent link">&para;</a></h3>
<p>Below is a table describing all of the actions available.</p>
<table>
<thead>
<tr>
<th>Action</th>
<th>Method</th>
<th>Path</th>
<th>Note</th>
</tr>
</thead>
<tbody>
<tr>
<td>index</td>
<td>GET</td>
<td>/users</td>
<td>Returns all users, optionally filtered by the request data.</td>
</tr>
<tr>
<td>store</td>
<td>POST</td>
<td>/users</td>
<td>Creates a new user from the request data.</td>
</tr>
<tr>
<td>show</td>
<td>GET</td>
<td>/users/:id</td>
<td>Returns the user with the ID supplied in the path.</td>
</tr>
<tr>
<td>replace</td>
<td>PUT</td>
<td>/users/:id</td>
<td>Updates the specified user, setting any fields not present in the request data to <code>nil</code>.</td>
</tr>
<tr>
<td>update</td>
<td>PATCH</td>
<td>/users/:id</td>
<td>Updates the specified user, only modifying fields present in the request data.</td>
</tr>
<tr>
<td>delete</td>
<td>DELETE</td>
<td>/users/:id</td>
<td>Deletes the specified user.</td>
</tr>
<tr>
<td>clear</td>
<td>DELETE</td>
<td>/users</td>
<td>Deletes all users, optionally filtered by the request data.</td>
</tr>
<tr>
<td>create</td>
<td>GET</td>
<td>/users/create</td>
<td>Displays a form for creating a new user.</td>
</tr>
<tr>
<td>edit</td>
<td>GET</td>
<td>/users/:id/edit</td>
<td>Displays a form for editing the specified user.</td>
</tr>
</tbody>
</table>
<div class="admonition tip">
<p class="admonition-title">Tip</p>
<p>The difference between <code>replace</code> and <code>update</code> is subtle but important:
If a field does not exist in the request data (for example, the user's age is missing),
<code>update</code> should simply not update that field where as <code>replace</code> should set it to <code>nil</code>.
If required data is missing from a <code>replace</code> request, an error should be thrown.</p>
</div>
<h2 id="folder">Folder<a class="headerlink" href="#folder" title="Permanent link">&para;</a></h2>
<p>Controllers can go anywhere in your application, but they are most often stored in the <code>App/Controllers/</code> directory. </p>
<div class="admonition tip">