Tailorは、Streamsを使用してFragment ServicesからWebページを作成するレイアウトサービスです。 O'Reillyは、このブログ投稿のタイトルで「node.jsサーバーに統合できるミドルウェアを提供するライブラリ」と説明しています。 FacebookのBigPipeに部分的に触発されていますが、eコマースの文脈で開発されています。
テーラーの機能と利点のいくつか:
TailorはProject Mosaicの一部であり、開発者がフロントエンド用のマイクロサービスを作成できるようにすることを目的としています。モザイクには、ルート(Innkeeper)を保存する関連するRESTFUL APIを備えたサービス構成(スキッパー)用の拡張可能なHTTPルーターも含まれています。パブリックリリースのために、より多くのコンポーネントがパイプラインにあります。フロントエンドのチームがモノリスからマイクロサービスの移行を行っている場合、テーラーとその利用可能な兄弟が有益であると思うかもしれません。
マイクロサービスは最近、多くの牽引力を獲得しています。複数のチームが互いに独立して作業し、独自のテクノロジースタックを選択し、独自のリリースサイクルを確立できるようにします。残念ながら、フロントエンド開発は、マイクロサービスが提供する利点をまだ完全に活用していません。ウェブサイトを構築するための一般的な慣行は「モノリス」のままです。複数のAPIを消費する単一のフロントエンドコードベースです。
フロントエンドにマイクロサービスがある場合はどうなりますか?これにより、FrontEnd開発者は同じ機能でバックエンドのカウンターパートと協力し、ヘッダー、製品、フッターなどの「フラグメント」(フラグメント」を独立して展開できます。フロントエンドにマイクロサービスを提供するには、フラグメントからウェブサイトを構成するレイアウトサービスが必要です。テーラーは、このニーズを解決するために開発されました。
テーラーの使用を開始します:
yarn add node-tailor const http = require ( 'http' ) ;
const Tailor = require ( 'node-tailor' ) ;
const tailor = new Tailor ( { /* Options */ } ) ;
const server = http . createServer ( tailor . requestHandler ) ;
server . listen ( process . env . PORT || 8080 ) ; fetchContext(request) - コンテキストの約束を返す関数、つまりフラグメントIDをフラグメントURLにマップするオブジェクトであり、ページ上のフラグメントのURLをオーバーライドできるように、デフォルトはPromise.resolve({})になりますfetchTemplate(request, parseTemplate) - テンプレートを取得する機能、 parseTemplateを呼び出し、結果の約束を返します。 S3からテンプレートを取得およびキャッシュする独自の方法を実装するのに役立ちます。デフォルトの実装lib/fetch-template.jsファイルシステムからテンプレートを取得しますtemplatesPathテンプレートがローカルに保存されているパスを指定するには、デフォルト/templates/fragmentTagフラグメントタグの名前、デフォルトはfragmentになりますhandledTagsカスタムタグの配列、詳細についてはtests/handle-tag確認してくださいhandleTag(request, tag, options, context) - タグまたはクロージングタグを受信し、文字列にシリアル化するか、ストリームを返しますfilterRequestHeaders(attributes, request) - フラグメントリクエストに渡されるリクエストヘッダーをフィルタリングする関数、 lib/filter-headersのデフォルトの実装を確認しますfilterResponseHeaders(attributes, headers) - 指定された応答ヘッダーをプライマリフラグメントリクエストから最終応答にマップする関数maxAssetLinksフラグメントごとに尊敬されるCSSおよびJSのLinkヘッダーディレクティブの数 - デフォルトは1になりますrequestFragment(filterHeaders)(url, attributes, request) - Fragment Serverにリクエストの約束を返す機能、 lib/request-fragmentのデフォルトの実装を確認しますamdLoaderUrl -url to amdローダー。デフォルトとしてCDNJSのrequirejsを使用しますpipeInstanceNameフロントエンドフックを消費するためにブラウザウィンドウで使用できるパイプインスタンス名。pipeAttributes(attributes) - フロントエンドフックで使用可能なフラグメント属性の最小セットを返す関数。tracer -Opentracing Complaint Tracer実装。 TailorはParse5を使用してテンプレートを解析し、各fragmentTagをフラグメントサーバーのストリームに置き換え、 handleTag関数の結果でhandledTagsます。
< html >
< head >
< script type =" fragment " src =" http://assets.domain.com " > </ script >
</ head >
< body >
< fragment src =" http://header.domain.com " > </ fragment >
< fragment src =" http://content.domain.com " primary > </ fragment >
< fragment src =" http://footer.domain.com " async > </ fragment >
</ body >
</ html >idオプションの一意の識別子(自動生成)srcフラグメントのURLprimary - ページの応答コードを設定するフラグメントを示しますtimeout - ミリ秒単位でのフラグメントのオプションのタイムアウト(デフォルトは3000)asyncボディタグの終わりまでフラグメントを延期しますpublic - テーラーがフィルタリングされた要求ヘッダーを上流からフラグメントに転送しないようにします。fallback-src電流フラグメントのタイムアウト/エラーの場合のフォールバックフラグメントのURLその他の属性は許可されており、関連する関数にも渡されます(たとえば、
filterRequestHeaders、filterResponseHeadersなど)
フラグメントは、ページの部分のみをレンダリングし、 Linkヘッダーを設定してCSSおよびJavaScriptリソースにURLを提供するHTTP(S)サーバーです。ドラフトの実装についてはexamples/basic-css-and-js/index.js確認してください。
フラグメントのJavaScriptはAMDモジュールであり、 init関数をエクスポートし、フラグメントのDOM要素で引数として呼び出されます。
フラグメント応答に「位置」ヘッダーが含まれている場合でも、テーラーはリダイレクトに従いません。これは、リダイレクトが不要なレイテンシを導入できるため、意図的です。属性primaryを持つフラグメントは、ページのステータスコードを制御するため、リダイレクトを実行できます。
注:AWSとの互換性については、 Linkヘッダーをx-amz-meta-linkとして渡すこともできます
デフォルトでは、着信要求はテンプレートの選択に使用されます。
index.htmlテンプレートを取得するには、 /indexに移動します。
/product/my-product-123を聴きたい場合は、 product.htmlテンプレートに移動したい場合は、 req.url /productに変更できます。
すべてのヘッダーはデフォルトで情報の漏れを避けるためにフィルタリングされますが、ヘッダー、 x-request-host 、 x-request-uriに追加することで、元のURIとホストを与えることができます。その後、ヘッダーを読み、フェッチと表示する製品を知ることができます。
http
. createServer ( ( req , res ) => {
req . headers [ 'x-request-uri' ] = req . url
req . url = '/index'
tailor . requestHandler ( req , res ) ;
} )
. listen ( 8080 , function ( ) {
console . log ( 'Tailor server listening on port 8080' ) ;
} ) ;Tailorの概念のいくつかは、特定のドキュメントで詳細に説明されています。
Tailorには、オペラシングを備えた箱から外れたトレーストレースインストルメンテーションがあります。 Ingress HTTP要求の任意のスパンコンテキストを選択し、既存のリモートプロシージャコール(RPC)に伝播します。
現在、フラグメントの取得のみが計装されており、フラグメントタグ、属性、エラーのスタックトレースのようなロギングペイロードなどの追加の詳細を提供しています。
# Get a copy of the repository
git clone https://github.com/zalando/tailor.git
# Change to the folder
cd tailor
# Install dependencies
yarnnode examples/basicnode examples/basic-css-and-jsnode examples/multiple-fragments-with-custom-amdnode examples/fragment-performance特定の例を実行した後、http:// localhost:8080/indexにアクセスしてください。
注:ノードバージョン> 6.0.0で例を実行してください
シングルページアプリケーションの例も利用できます。
ベンチマークの実行を開始するには、 npm run benchmarkを実行し、結果を確認するために数秒間待ちます。
ここで貢献ガイドラインを確認してください。