#目的
TrotのREADME.mdを翻訳する。#実行環境
OS:Windows8.1Trot Framework: v0.5.0 or v0.6.0
#目次
1. README.md翻訳2. まとめ
#参考文献
https://github.com/hexedpackets/trot#始める前に
注意!!
この記事は、trotのREADME.mdをyahoo翻訳の力を借り、素人翻訳した内容を書いています。
管理人の英語力は本人がドン引きするほど低いので、
間違った解釈及び理解している部分が多分にあると思います。
それでも構わないという方は見て頂けたら嬉しいです。
また、ご指摘等があれば受け付けておりますゆえ、遠慮なくお願いします。
特に間違えて習得している部分は教えて頂ければ、本当に助かります。
以下の部分は全て原文から引用している部分です
>英文
CHANGELOG.mdを見るとv0.5.0までしか書いてないけど、
VERSIONのファイルを見るとv0.6.0と書いてある。
どっち正式だ?書いてるだけでv0.6.0じゃない?CHANGELOG.mdを更新してないだけ?
追記(2015/06/14)
無事、Hello World的なもの出せました。
[Elixir+Trot] Trotフレームワークを使って"Hello Trot!!"するだけの簡単なお仕事・・・
##1. README.md翻訳
-trot
>Trot is an Elixir web micro-framework based on Plug and Cowboy.
>The goal of Trot is to make common patterns in Plug easier to use,
>particularly when writing APIs, without sacrificing flexibility.
Trotは、PlugとCowboyを基本としたElixirのWebマイクロ・フレームワークです。
特にAPIを記述する時、Trotの目的はPlugの柔軟性を犠牲にすることなく一般パターンをより使いやすくすることです。
-Usage
>Add Trot as a dependency to your mix.exs file and update your applications list to include it.
あなたのmix.exsファイルへ依存関係Trotを加えて、あなたのアプリケーション・リストを更新して下さい。
----
defp deps do
[{:trot, github: "hexedpackets/trot"}]
end
def application do
[applications: [:trot]]
end
----
>The following configuration options are supported by the server:
以下の構成オプションは、サーバでサポートされています。
>config :trot, :port, 4000: port to listen on for incoming HTTP requests. Defaults to "4000".
>
>config :trot, :router, MyApp.Router: module to route requests to. Defaults to "Trot.NotFound".
>
>config :trot, :heartbeat, "/heartbeat": path to setup a heartbeat route.
>This will always return 200 with a body of "OK". Defaults to "/heartbeat".
>
>Finally, put use Trot.Router to the top of your module.
>This will add route macros and setup the plug pipeline at compile time.
config :trot, :port, 4000:
HTTPリクエストを受けるポートの設定。デフォルトは4000番。
config :trot, :router, MyApp.Router:
リクエストを送るモジュールを設定。デフォルトは"Trot.NotFound"
config :trot, :heartbeat, "/heartbeat":
heartbeatのルートパスを設定。これは、常にbodyにOKと200が戻ります。デフォルトは"/heartbeat"
最後に、"use Trot.Router"を置いてください。あなたのモジュールの上部へ。
これはルート・マクロを加えます、そして、セットアップがコンパイル時のプラグ・パイプラインです。
最後に、一番上へあなたのモジュールを置いて"use Trot.Router"して下さい。
これは、ルートマクロへ加えています。そして、コンパイル時にプラグパイプラインをセットアップします。
-Routes
>Routes are specified using one of the HTTP method
>macros: get/3, post/3, put/3, patch/3, delete/3, options/3.
>The first argument is a the path to route to,
>the second (optional) argument is a keyword list of any options to match against,
>and the last argument is the block of code to execute. Examples are below.
>
>If @path_root is specified, it will be prefixed to all routes in that module.
>
>Routes can be setup in different modules and imported into the main router
>with the import_routes/1 macro,
>which takes a module name as the only argument.
>Note that ordering matters as normal Elixir pattern matching rules apply to imported routes.
>
>A default 404 response can be enabled by putting import_routes Trot.NotFound or
>use Trot.NotFound at the end of the module.
ルートに指定して使えるHTTPメソッドのマクロ: get/3, post/3, put/3, patch/3, delete/3, options/3。
第一引数はルートのパス、第二引数はキーワードリストの幾つかのオプションに対してマッチする。
最後の引数は実行するコードのブロックです。
下記は例です。
もし"@path_root"を指定したら、それはモジュールの中の全てのルートにプレフィックスが付きます。
ルートは異なるモジュールでのセットアップがありえます。
それは、"import_routes/1"マクロでメインルータにインポートされます。
それは、唯一の引数としてモジュール名を取ります。
オーダが重要である点に注意して下さい。通常のElixirパターンマッチ規則としてインポートされたルートにapplyして下さい。
デフォルト404のレスポンスは、"import_routes Trot.NotFound"で許可するかモジュールの終わりに"use Trot.NotFound"でできます。
-Responses
>All of the following are valid return values from handlers and
>will be parsed into full HTTP responses:
>
>- String of response body
>- Status code, either numeric or an atom from Plug.Conn.Status
>- {code, body}
>- {code, body, headers}
>- JSONable object
>- {code, object}
>- {code, object, headers}
>- {:redirect, location}
>- {:badrpc, error}
>- %Plug.Conn{}
以下の全ては、ハンドラーからの有効な戻り値でフルHTTPレスポンスに解析されます。
- String of response body
- Status code, either numeric or an atom from Plug.Conn.Status
- {code, body}
- {code, body, headers}
- JSONable object
- {code, object}
- {code, object, headers}
- {:redirect, location}
- {:badrpc, error}
- %Plug.Conn{}
#Example router application
----
defmodule SoLoMoApp.Router do
use Trot.Router
# Returns an empty body with a status code of 400
get "/bad" do
:bad_request
end
# Sets the status code to 200 with a text body
get "/text" do
"Thank you for your question."
end
# Redirect the incoming request
get "/text/body", headers: ["x-text-type": "question"] do
{:redirect, "/text"}
end
# Sets the status code to 201 with a text body
get "/text/body" do
{201, "optimal tip-to-tip efficiency"}
end
# Sets status code to 200 with a JSON-encoded body
get "/json" do
%{"hyper" => "social"}
end
# Pattern match part of the path into a variable
get "/presenter/:name" do
"The presenter is #{name}"
end
import_routes Trot.NotFound
end
----
#Templating
>To add templating in a router,
>add use Trot.Template and set @template_root to the top-level directory
>containing your templates.
>By default, @template_root is "templates/".
>
>Trot can be used to render EEx templates (the default engine include with Elixir),
>HAML templates through Calliope, or a combination of both.
>When the application is compiled a render_template/2 function is
>generated for every template under @template_root.
>render_template/2 expects the name of the template
>relative to @template_root as the first
>argument and a keyword list of variables to assign as the second argument.
>
>When MIX_ENV=prod all of templates are loaded and pre-compiled for faster rendering.
ルータにテンプレートを加えるために、"use Trot.Template"を加え、
"@template_root"であなたのテンプレートをトップレベルのディレクトリに設定して下さい。
デフォルトでは、"@template_root"は"templates/"です。
Trotは、EEXテンプレートをレンダリングすることができます。
(デフォルトエンジンではElixirを含みます)
カリオペを通してHamlテンプレートか両方の組み合わせができます。
アプリケーションがコンパイルされる時、"render_template/2"関数は"@template_root"の下であらゆるテンプレートに生成されます。
"render_template/2"は、最初の引数と第二引数として割り当てる変数のキーワードリストとして"@template_root"と比較して名前をテンプレートに期待します。
"MIX_ENV=prod"が速いレンダリングのため全てのテンプレートをロードしてプレコンパイルする。
-Example app using templates
----
defmodule PiedPiper do
use Trot.Router
use Trot.Template
@template_root "templates/root"
get "/compression/pied_piper" do
render_template("compression_results.html.eex", [weissman_score: 5.2])
end
get "/compression/nucleus" do
render_template("compression_results.html.haml", [weissman_score: 2.89])
end
end
# compression_results.html.eex
<html><body>Pied piper has a Weissman Score of <%= @weissman_score %></body></html>
# compression_results.html.haml
%html
%body Nucleaus has a Weissman Score of <%= @weissman_score %>
----
-API versioning
>Adding use Trot.Versioning to your module will enable API version parsing and
>pattern matching.
>The first part of the path for all requests in the module is assumed to be the version.
>It is parsed into the conn[:assigns] dictionary, making it easy to access.
>Routes can also be configured to only match a particular version.
"use Trot.Versioning"をモジュールに加えるとAPIバージョン分析とパターンマッチを可能にします。
モジュールの全てのリクエストのためのパスの最初の部分はバージョンであるとされます。
それは、"conn[:assigns]"に解析されます、アクセスするのを簡単にする。
ルートは、特定のバージョンにだけにマッチするように構成されることもできる。
-Example versioned app
----
defmodule Nucleus do
use Trot.Router
use Trot.Versioning
get "/version" do
conn.assigns[:version]
end
get "/current", version: "v1" do
:ok
end
get "/current" do
:bad_request
end
end
----
>In the above example, "/v1/version" will return "v1" as the response body.
>A request to "/v1/current" will return a 200 but "/v2/current" will return a 400.
上記の例において"/v1/version"は、レスポンスとして"v1"を返します。
"v1/current"へのリスエストは200を返します。しかし、"/v2/current"は400を返します。
##2. まとめ
やっぱり翻訳は面倒くさい。一日掛かってしまった。
#管理人の独り言~
動きません・・・サンプルのソースコードを記述してもコンパイルエラーが出ます。
また、私の知識不足か起動方法さえ分かりません。
なので、デフォルトのページ(があれば)も表示できませんでした。
もう少し情報を探すか待ってみます。
それまでは、RailsチュートリアルをPhoenixで書き換えて実施して行こうと思います。
翻訳は"Google Translator Toolkit"を使います。
こんなのあったの知らなかった・・・