mirror of https://github.com/vapor/docs.git
Compare commits
27 Commits
9df5d2768e
...
bb1a2867f4
| Author | SHA1 | Date |
|---|---|---|
|
|
bb1a2867f4 | |
|
|
f2000c5544 | |
|
|
12d9bd6b52 | |
|
|
359f89b2b8 | |
|
|
4c8ff6f0b0 | |
|
|
053a46f953 | |
|
|
9dc39172b7 | |
|
|
151df13e6b | |
|
|
89abfe99ea | |
|
|
4e6c15f3c5 | |
|
|
a3501f9221 | |
|
|
40b992beab | |
|
|
6af2df1fba | |
|
|
1661adfc5c | |
|
|
f37592046a | |
|
|
3029c8eab1 | |
|
|
7eaebe178a | |
|
|
42dae97fe6 | |
|
|
2305ddc577 | |
|
|
3a5cb02e93 | |
|
|
b828c9f568 | |
|
|
16021e2d82 | |
|
|
b7a745481b | |
|
|
961c886b28 | |
|
|
27446a3441 | |
|
|
9bc3acd019 | |
|
|
6faa8ea64d |
|
|
@ -166,7 +166,7 @@ private func withApp(_ test: (Application) async throws -> ()) async throws {
|
|||
|
||||
Vaporには`XCTVapor`というモジュールが含まれており、`XCTest`をベースとしたテストヘルパーを提供しています。これらのテストヘルパーを使用すると、Vaporアプリケーションにプログラムでテストリクエストを送信したり、HTTPサーバー経由で実行したりできます。
|
||||
|
||||
### はじめに {#getting-started-1}
|
||||
### はじめに {#getting-started_1}
|
||||
|
||||
`XCTVapor`モジュールを使用するには、パッケージのテストターゲットに追加されていることを確認してください。
|
||||
|
||||
|
|
@ -200,7 +200,7 @@ final class MyTests: XCTestCase {
|
|||
|
||||
`test`で始まる各関数は、アプリがテストされるときに自動的に実行されます。
|
||||
|
||||
### テスト可能なアプリケーション {#testable-application-1}
|
||||
### テスト可能なアプリケーション {#testable-application_1}
|
||||
|
||||
`.testing`環境を使用して`Application`のインスタンスを初期化します。このアプリケーションがdeinitializeされる前に`app.shutdown()`を呼び出す必要があります。
|
||||
|
||||
|
|
@ -214,7 +214,7 @@ try configure(app)
|
|||
|
||||
設定を適用するために、`Application`をパッケージの`configure(_:)`メソッドに渡します。テスト専用の設定は後で適用できます。
|
||||
|
||||
#### リクエストの送信 {#send-request-1}
|
||||
#### リクエストの送信 {#send-request_1}
|
||||
|
||||
アプリケーションにテストリクエストを送信するには、`test`メソッドを使用します。
|
||||
|
||||
|
|
|
|||
|
|
@ -4,7 +4,7 @@
|
|||
|
||||
Vaporのトレーシング APIは[swift-distributed-tracing](https://github.com/apple/swift-distributed-tracing)の上に構築されているため、swift-distributed-tracingのすべての[バックエンド実装](https://github.com/apple/swift-distributed-tracing/blob/main/README.md#tracing-backends)と互換性があります。
|
||||
|
||||
Swiftでのトレーシングとスパンに馴染みがない場合は、[OpenTelemetryトレースドキュメント](https://opentelemetry.io/docs/concepts/signals/traces/)と[swift-distributed-tracingドキュメント](https://swiftpackageindex.com/apple/swift-distributed-tracing/main/documentation/tracing)を確認してください。
|
||||
Swiftでのトレーシングとスパンに馴染みがない場合は、[OpenTelemetryトレースドキュメント](https://opentelemetry.io/ja/docs/concepts/signals/traces/)と[swift-distributed-tracingドキュメント](https://swiftpackageindex.com/apple/swift-distributed-tracing/main/documentation/tracing)を確認してください。
|
||||
|
||||
## TracingMiddleware {#tracingmiddleware}
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# WebSockets
|
||||
|
||||
[WebSockets](https://en.wikipedia.org/wiki/WebSocket)は、クライアントとサーバー間の双方向通信を可能にします。リクエストとレスポンスのパターンを持つHTTPとは異なり、WebSocketのピアは任意の数のメッセージを双方向に送信できます。VaporのWebSocket APIを使用すると、メッセージを非同期に処理するクライアントとサーバーの両方を作成できます。
|
||||
[WebSockets](https://ja.wikipedia.org/wiki/WebSocket)は、クライアントとサーバー間の双方向通信を可能にします。リクエストとレスポンスのパターンを持つHTTPとは異なり、WebSocketのピアは任意の数のメッセージを双方向に送信できます。VaporのWebSocket APIを使用すると、メッセージを非同期に処理するクライアントとサーバーの両方を作成できます。
|
||||
|
||||
## サーバー {#server}
|
||||
|
||||
|
|
|
|||
|
|
@ -42,7 +42,7 @@ VaporはSwiftの行動規範を採用しており、[https://www.swift.org/code-
|
|||
|
||||
オープンソースプロジェクトに取り組んだことがない場合、実際に貢献する手順は混乱する可能性がありますが、実際にはとても簡単です。
|
||||
|
||||
まず、Vaporまたは作業したいリポジトリをフォークします。これはGitHub UIで行うことができ、GitHubには[これを行う方法に関する優れたドキュメント](https://docs.github.com/en/get-started/quickstart/fork-a-repo)があります。
|
||||
まず、Vaporまたは作業したいリポジトリをフォークします。これはGitHub UIで行うことができ、GitHubには[これを行う方法に関する優れたドキュメント](https://docs.github.com/ja/pull-requests/collaborating-with-pull-requests/working-with-forks/fork-a-repo)があります。
|
||||
|
||||
その後、通常のコミットとプッシュのプロセスで、フォークで変更を加えることができます。修正を提出する準備ができたら、VaporのリポジトリにPRを作成できます。ここでも、GitHubには[これを行う方法に関する優れたドキュメント](https://docs.github.com/en/pull-requests/collaborating-with-pull-requests/proposing-changes-to-your-work-with-pull-requests/creating-a-pull-request-from-a-fork)があります。
|
||||
|
||||
|
|
|
|||
|
|
@ -18,7 +18,7 @@ Docker を実行するための開発環境をセットアップし、Docker ス
|
|||
|
||||
### Docker のインストール {#install-docker}
|
||||
|
||||
開発環境用に Docker をインストールする必要があります。Docker Engine Overview の [Supported Platforms](https://docs.docker.com/install/#supported-platforms) セクションで、任意のプラットフォームの情報を見つけることができます。Mac OS を使用している場合は、[Docker for Mac](https://docs.docker.com/docker-for-mac/install/) のインストールページに直接ジャンプできます。
|
||||
開発環境用に Docker をインストールする必要があります。Docker Engine Overview の [Supported Platforms](https://docs.docker.jp/get-docker.html) セクションで、任意のプラットフォームの情報を見つけることができます。Mac OS を使用している場合は、[Docker for Mac](https://docs.docker.jp/desktop/install/mac-install.html) のインストールページに直接ジャンプできます。
|
||||
|
||||
### テンプレートの生成 {#generate-template}
|
||||
|
||||
|
|
@ -29,19 +29,19 @@ Vapor テンプレートを出発点として使用することをお勧めし
|
|||
|
||||
## Docker リソース {#docker-resources}
|
||||
|
||||
今すぐでも近い将来でも、[Docker Overview](https://docs.docker.com/engine/docker-overview/) に慣れることは価値があります。概要では、このガイドで使用するいくつかの重要な用語が説明されています。
|
||||
今すぐでも近い将来でも、[Docker Overview](https://docs.docker.jp/get-started/overview.html) に慣れることは価値があります。概要では、このガイドで使用するいくつかの重要な用語が説明されています。
|
||||
|
||||
テンプレート Vapor アプリには、2つの重要な Docker 固有のリソースがあります:**Dockerfile** と **docker-compose** ファイルです。
|
||||
|
||||
### Dockerfile
|
||||
|
||||
Dockerfile は、Docker 化されたアプリのイメージをビルドする方法を Docker に指示します。そのイメージには、アプリの実行可能ファイルと、それを実行するために必要なすべての依存関係が含まれています。Dockerfile をカスタマイズする際は、[完全なリファレンス](https://docs.docker.com/engine/reference/builder/)を開いておくことをお勧めします。
|
||||
Dockerfile は、Docker 化されたアプリのイメージをビルドする方法を Docker に指示します。そのイメージには、アプリの実行可能ファイルと、それを実行するために必要なすべての依存関係が含まれています。Dockerfile をカスタマイズする際は、[完全なリファレンス](https://docs.docker.jp/engine/reference/builder.html)を開いておくことをお勧めします。
|
||||
|
||||
Vapor アプリ用に生成された Dockerfile には2つのステージがあります。最初のステージはアプリをビルドし、結果を含む保持領域を設定します。2番目のステージは、安全なランタイム環境の基本を設定し、保持領域内のすべてを最終イメージ内の配置場所に転送し、デフォルトポート(8080)でプロダクションモードでアプリを実行するデフォルトのエントリポイントとコマンドを設定します。この設定は、イメージを使用するときに上書きできます。
|
||||
|
||||
### Docker Compose ファイル {#docker-compose-file}
|
||||
|
||||
Docker Compose ファイルは、Docker が複数のサービスを相互に関連付けてビルドする方法を定義します。Vapor アプリテンプレートの Docker Compose ファイルは、アプリをデプロイするために必要な機能を提供しますが、詳細を学びたい場合は、利用可能なすべてのオプションの詳細が記載されている[完全なリファレンス](https://docs.docker.com/compose/compose-file/)を参照してください。
|
||||
Docker Compose ファイルは、Docker が複数のサービスを相互に関連付けてビルドする方法を定義します。Vapor アプリテンプレートの Docker Compose ファイルは、アプリをデプロイするために必要な機能を提供しますが、詳細を学びたい場合は、利用可能なすべてのオプションの詳細が記載されている[完全なリファレンス](https://docs.docker.jp/reference/compose-file/toc.html)を参照してください。
|
||||
|
||||
!!! note
|
||||
最終的に Kubernetes を使用してアプリをオーケストレーションする予定がある場合、Docker Compose ファイルは直接関係ありません。ただし、Kubernetes マニフェストファイルは概念的に似ており、[Docker Compose ファイルの移植](https://kubernetes.io/docs/tasks/configure-pod-container/translate-compose-kubernetes/)を目的としたプロジェクトもあります。
|
||||
|
|
|
|||
|
|
@ -108,7 +108,7 @@ Postgresアプリの名前がわからない場合は、`fly pg list`で確認
|
|||
!!! note
|
||||
`fly pg create`と`fly pg attach`の違いは、前者がPostgresデータベースをホストできるFlyアプリを割り当てて設定するのに対し、後者は選択したアプリ用の実際のデータベースとユーザーを作成することです。要件に適合する場合、単一のPostgres Flyアプリが様々なアプリで使用される複数のデータベースをホストできます。`fly launch`でFlyにデータベースアプリの作成を依頼すると、`fly pg create`と`fly pg attach`の両方を呼び出すのと同等の処理が行われます。
|
||||
|
||||
### VaporアプリをデータベースにAndroidする {#connecting-your-vapor-app-to-the-database}
|
||||
### Vaporアプリをデータベースに接続する {#connecting-your-vapor-app-to-the-database}
|
||||
アプリがデータベースにアタッチされると、Flyは`DATABASE_URL`環境変数に資格情報を含む接続URLを設定します(機密情報として扱う必要があります)。
|
||||
|
||||
最も一般的なVaporプロジェクトの設定では、`configure.swift`でデータベースを設定します。以下は設定例です:
|
||||
|
|
|
|||
|
|
@ -133,7 +133,7 @@ echo "web: App serve --env production" \
|
|||
"--hostname 0.0.0.0 --port \$PORT" > Procfile
|
||||
```
|
||||
|
||||
### 変更のコミット {#commit-changes-2}
|
||||
### 変更のコミット {#commit-changes_1}
|
||||
|
||||
これらのファイルを追加しましたが、まだコミットされていません。プッシュしてもHerokuはそれらを見つけられません。
|
||||
|
||||
|
|
|
|||
|
|
@ -30,7 +30,7 @@ Vaporが`80`または`443`以外のポートにバインドされている場合
|
|||
|
||||
チュートリアル:
|
||||
|
||||
- [Ubuntu 20.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04)
|
||||
- [Ubuntu 20.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-20-04-ja)
|
||||
- [Ubuntu 18.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-18-04)
|
||||
- [CentOS 8にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-centos-8)
|
||||
- [Ubuntu 16.04にNginxをインストールする方法](https://www.digitalocean.com/community/tutorials/how-to-install-nginx-on-ubuntu-16-04)
|
||||
|
|
@ -47,7 +47,7 @@ sudo apt-get update
|
|||
sudo apt-get install nginx
|
||||
```
|
||||
|
||||
#### CentOSとAmazon Linux
|
||||
#### CentOSとAmazon Linux {#centos-and-amazon-linux}
|
||||
|
||||
```sh
|
||||
sudo yum install nginx
|
||||
|
|
@ -133,7 +133,7 @@ server {
|
|||
|
||||
### TLS
|
||||
|
||||
証明書が適切に生成されていれば、TLSの追加は比較的簡単です。無料でTLS証明書を生成するには、[Let's Encrypt](https://letsencrypt.org/getting-started/)を確認してください。
|
||||
証明書が適切に生成されていれば、TLSの追加は比較的簡単です。無料でTLS証明書を生成するには、[Let's Encrypt](https://letsencrypt.org/ja/getting-started/)を確認してください。
|
||||
|
||||
```sh
|
||||
server {
|
||||
|
|
|
|||
|
|
@ -13,7 +13,7 @@ sudo apt-get update
|
|||
sudo apt-get install supervisor
|
||||
```
|
||||
|
||||
### CentOSとAmazon Linux
|
||||
### CentOSとAmazon Linux {#centos-and-amazon-linux}
|
||||
|
||||
```sh
|
||||
sudo yum install supervisor
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# モデル
|
||||
# モデル {#models}
|
||||
|
||||
モデルは、データベースのテーブルやコレクションに格納されたデータを表現します。モデルは、コード化可能な値を格納する1つ以上のフィールドを持ちます。すべてのモデルには一意の識別子があります。プロパティラッパーは、識別子、フィールド、リレーションを示すために使用されます。
|
||||
|
||||
|
|
@ -188,7 +188,7 @@ final class Planet: Model {
|
|||
|-|-|
|
||||
|`.create`|新しいモデルインスタンスがデータベースに保存されるときに設定される|
|
||||
|`.update`|既存のモデルインスタンスがデータベースに保存されるときに設定される|
|
||||
|`.delete`|モデルがデータベースから削除されるときに設定される。[ソフトデリート](#soft-delete)を参照|
|
||||
|`.delete`|モデルがデータベースから削除されるときに設定される。[論理削除](#soft-delete)を参照|
|
||||
|
||||
`@Timestamp`の日付値はオプショナルで、新しいモデルを初期化するときは`nil`に設定する必要があります。
|
||||
|
||||
|
|
@ -225,9 +225,9 @@ var updatedAt: Date?
|
|||
model.$updatedAt.timestamp = "2020-06-03T16:20:14+00:00"
|
||||
```
|
||||
|
||||
### ソフトデリート {#soft-delete}
|
||||
### 論理削除 {#soft-delete}
|
||||
|
||||
`.delete`トリガーを使用する`@Timestamp`をモデルに追加すると、ソフトデリートが有効になります。
|
||||
`.delete`トリガーを使用する`@Timestamp`をモデルに追加すると、論理削除が有効になります。
|
||||
|
||||
```swift
|
||||
final class Planet: Model {
|
||||
|
|
@ -237,20 +237,20 @@ final class Planet: Model {
|
|||
}
|
||||
```
|
||||
|
||||
ソフトデリートされたモデルは削除後もデータベースに存在しますが、クエリでは返されません。
|
||||
論理削除されたモデルは削除後もデータベースに存在しますが、クエリでは返されません。
|
||||
|
||||
!!! tip
|
||||
削除時のタイムスタンプを将来の日付に手動で設定できます。これは有効期限として使用できます。
|
||||
|
||||
ソフトデリート可能なモデルをデータベースから強制的に削除するには、`delete`の`force`パラメータを使用します。
|
||||
論理削除可能なモデルをデータベースから強制的に削除するには、`delete`の`force`パラメータを使用します。
|
||||
|
||||
```swift
|
||||
// モデルがソフトデリート可能であっても
|
||||
// モデルが論理削除可能であっても
|
||||
// データベースから削除する
|
||||
model.delete(force: true, on: database)
|
||||
```
|
||||
|
||||
ソフトデリートされたモデルを復元するには、`restore`メソッドを使用します。
|
||||
論理削除されたモデルを復元するには、`restore`メソッドを使用します。
|
||||
|
||||
```swift
|
||||
// 削除時のタイムスタンプをクリアして、
|
||||
|
|
@ -258,14 +258,14 @@ model.delete(force: true, on: database)
|
|||
model.restore(on: database)
|
||||
```
|
||||
|
||||
クエリにソフトデリートされたモデルを含めるには、`withDeleted`を使用します。
|
||||
クエリに論理削除されたモデルを含めるには、`withDeleted`を使用します。
|
||||
|
||||
```swift
|
||||
// ソフトデリートされたものを含むすべての惑星を取得
|
||||
// 論理削除されたものを含むすべての惑星を取得
|
||||
Planet.query(on: database).withDeleted().all()
|
||||
```
|
||||
|
||||
## 列挙型 {#enum}
|
||||
## Enum
|
||||
|
||||
`@Enum`は、文字列表現可能な型をネイティブデータベース列挙型として格納する特別な種類の`@Field`です。ネイティブデータベース列挙型は、データベースに型安全性の追加レイヤーを提供し、生の列挙型よりもパフォーマンスが向上する可能性があります。
|
||||
|
||||
|
|
@ -286,7 +286,7 @@ final class Pet: Model {
|
|||
|
||||
オプショナルの列挙型を格納するには、`@OptionalEnum`を使用します。
|
||||
|
||||
データベースは、マイグレーションを介して列挙型を処理する準備が必要です。詳細については[列挙型](schema.md#enum)を参照してください。
|
||||
データベースは、マイグレーションを介して列挙型を処理する準備が必要です。詳細については[Enum](schema.md#enum)を参照してください。
|
||||
|
||||
### 生の列挙型 {#raw-enums}
|
||||
|
||||
|
|
@ -436,15 +436,15 @@ app.get("users") { req async throws -> [GetUser] in
|
|||
}
|
||||
```
|
||||
|
||||
もう1つの一般的な使用例は、親リレーションや子リレーションなどのリレーションを扱う場合です。`@Parent`リレーションを持つモデルを簡単にデコードするためのDTOの使用例については、[親ドキュメント](relations.md##encoding-and-decoding-of-parents)を参照してください。
|
||||
もう1つの一般的な使用例は、親リレーションや子リレーションなどのリレーションを扱う場合です。`@Parent`リレーションを持つモデルを簡単にデコードするためのDTOの使用例については、[Parentドキュメント](relations.md##encoding-and-decoding-of-parents)を参照してください。
|
||||
|
||||
DTOの構造がモデルの`Codable`準拠と同じであっても、別の型として持つことで大規模なプロジェクトを整理できます。モデルのプロパティに変更を加える必要がある場合でも、アプリの公開APIを破壊する心配はありません。また、DTOをAPIの利用者と共有できる別のパッケージに配置し、VaporアプリでContent準拠を追加することも検討できます。
|
||||
|
||||
## エイリアス {#alias}
|
||||
|
||||
`ModelAlias`プロトコルを使用すると、クエリで複数回結合されるモデルを一意に識別できます。詳細については、[結合](query.md#join)を参照してください。
|
||||
`ModelAlias`プロトコルを使用すると、クエリで複数回結合されるモデルを一意に識別できます。詳細については、[Join](query.md#join)を参照してください。
|
||||
|
||||
## 保存 {#save}
|
||||
## Save
|
||||
|
||||
モデルをデータベースに保存するには、`save(on:)`メソッドを使用します。
|
||||
|
||||
|
|
@ -454,7 +454,7 @@ planet.save(on: database)
|
|||
|
||||
このメソッドは、モデルがすでにデータベースに存在するかどうかに応じて、内部的に`create`または`update`を呼び出します。
|
||||
|
||||
### 作成 {#create}
|
||||
### Create
|
||||
|
||||
新しいモデルをデータベースに保存するには、`create`メソッドを呼び出します。
|
||||
|
||||
|
|
@ -490,7 +490,7 @@ await withThrowingTaskGroup(of: Void.self) { taskGroup in
|
|||
}
|
||||
```
|
||||
|
||||
### 更新 {#update}
|
||||
### Update
|
||||
|
||||
データベースから取得したモデルを保存するには、`update`メソッドを呼び出します。
|
||||
|
||||
|
|
@ -521,7 +521,7 @@ Planet.query(on: database).all()
|
|||
|
||||
クエリの詳細については、[クエリ](query.md)セクションを参照してください。
|
||||
|
||||
## 検索 {#find}
|
||||
## Find
|
||||
|
||||
モデルには、識別子でモデルインスタンスを検索するための静的`find(_:on:)`メソッドがあります。
|
||||
|
||||
|
|
@ -540,8 +540,8 @@ Planet.find(req.parameters.get("id"), on: database)
|
|||
|`create`|モデルが作成される前に実行される|
|
||||
|`update`|モデルが更新される前に実行される|
|
||||
|`delete(force:)`|モデルが削除される前に実行される|
|
||||
|`softDelete`|モデルがソフト削除される前に実行される|
|
||||
|`restore`|モデルが復元される前に実行される(ソフト削除の反対)|
|
||||
|`softDelete`|モデルが論理削除される前に実行される|
|
||||
|`restore`|モデルが復元される前に実行される(論理削除の反対)|
|
||||
|
||||
モデルミドルウェアは、`ModelMiddleware`または`AsyncModelMiddleware`プロトコルを使用して宣言されます。すべてのライフサイクルメソッドにはデフォルトの実装があるため、必要なメソッドのみを実装する必要があります。各メソッドは、対象のモデル、データベースへの参照、チェーン内の次のアクションを受け入れます。ミドルウェアは、早期に返す、失敗したfutureを返す、または次のアクションを呼び出して通常どおり続行することを選択できます。
|
||||
|
||||
|
|
|
|||
|
|
@ -235,7 +235,7 @@ Planet.query(on: self.database)
|
|||
.range(2...)
|
||||
```
|
||||
|
||||
## 結合 {#join}
|
||||
## Join
|
||||
|
||||
クエリビルダーの`join`メソッドを使用すると、結果セットに別のモデルのフィールドを含めることができます。クエリに複数のモデルを結合できます。
|
||||
|
||||
|
|
@ -301,7 +301,7 @@ let home = try match.joined(HomeTeam.self)
|
|||
print(home.name)
|
||||
```
|
||||
|
||||
## 更新 {#update}
|
||||
## Update
|
||||
|
||||
クエリビルダーは、`update`メソッドを使用して一度に複数のモデルを更新することをサポートしています。
|
||||
|
||||
|
|
@ -315,7 +315,7 @@ Planet.query(on: database)
|
|||
|
||||
`update`は`set`、`filter`、`range`メソッドをサポートしています。
|
||||
|
||||
## 削除 {#delete}
|
||||
## Delete
|
||||
|
||||
クエリビルダーは、`delete`メソッドを使用して一度に複数のモデルを削除することをサポートしています。
|
||||
|
||||
|
|
|
|||
|
|
@ -216,7 +216,7 @@ Fluentはデフォルトでユニーク制約名を生成します。ただし
|
|||
|
||||
!!! warning
|
||||
外部キーアクションはデータベース内でのみ発生し、Fluentをバイパスします。
|
||||
これは、モデルミドルウェアやソフトデリートなどが正しく動作しない可能性があることを意味します。
|
||||
これは、モデルミドルウェアや論理削除などが正しく動作しない可能性があることを意味します。
|
||||
|
||||
## SQL {#sql}
|
||||
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ return req.db.transaction { database in
|
|||
}.transform(to: HTTPStatus.ok)
|
||||
```
|
||||
|
||||
## `async`/`await` {#async-await}
|
||||
## `async`/`await`
|
||||
|
||||
`async`/`await`を使用する場合、コードを以下のようにリファクタリングできます:
|
||||
|
||||
|
|
|
|||
|
|
@ -138,7 +138,7 @@ print(res)
|
|||
// "hello"
|
||||
```
|
||||
|
||||
## Pub/Subモード {#pub-sub-mode}
|
||||
## Pub/Subモード {#pubsub-mode}
|
||||
|
||||
Redisは、接続が特定の「チャンネル」をリッスンし、購読したチャンネルが「メッセージ」(何らかのデータ値)をパブリッシュしたときに特定のクロージャを実行できる[「Pub/Sub」モード](https://redis.io/topics/pubsub)をサポートしています。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# Vapor リリースノート
|
||||
# Vapor リリースノート {#vapor-release-notes}
|
||||
|
||||
ドキュメントを常に最新の状態に保つことは困難、あるいは不可能であるため、ここでは Vapor エコシステムに関連する様々なパッケージのリリースノートをご覧いただけます。
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
# 暗号 {#crypto}
|
||||
|
||||
Vapor には [SwiftCrypto](https://github.com/apple/swift-crypto/) が含まれており、これは Apple の CryptoKit ライブラリの Linux 互換ポートです。SwiftCrypto がまだサポートしていない [Bcrypt](https://en.wikipedia.org/wiki/Bcrypt) や [TOTP](https://en.wikipedia.org/wiki/Time-based_One-time_Password_algorithm) のような追加の暗号 API も公開されています。
|
||||
Vapor には [SwiftCrypto](https://github.com/apple/swift-crypto/) が含まれており、これは Apple の CryptoKit ライブラリの Linux 互換ポートです。SwiftCrypto がまだサポートしていない [Bcrypt](https://ja.wikipedia.org/wiki/Bcrypt) や [TOTP](https://ja.wikipedia.org/wiki/Time-based_One-time_Password) のような追加の暗号 API も公開されています。
|
||||
|
||||
## SwiftCrypto {#swiftcrypto}
|
||||
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@ await app.jwt.keys.add(hmac: "secret", digestAlgorithm: .sha256)
|
|||
|
||||
### 署名 {#signing}
|
||||
|
||||
追加されたキーは JWT の署名に使用できます。これを行うには、まず署名する_もの_、つまり「ペイロード」が必要です。
|
||||
追加されたキーは JWT の署名に使用できます。これを行うには、まず署名するもの、つまり「ペイロード」が必要です。
|
||||
このペイロードは、送信したいデータを含む単純な JSON オブジェクトです。`JWTPayload` プロトコルに準拠する構造体を作成することで、カスタムペイロードを作成できます:
|
||||
|
||||
```swift
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# パスワード
|
||||
# パスワード {#passwords}
|
||||
|
||||
Vaporには、パスワードを安全に保存・検証するためのパスワードハッシュAPIが含まれています。このAPIは環境に基づいて設定可能で、非同期ハッシュ化をサポートしています。
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Vapor 4を使用するには、Xcode 11.4およびmacOS 10.15以上が必要で
|
|||
|
||||
ドキュメントのインストールセクションで依存関係のインストールについて説明しています。
|
||||
|
||||
## Package.swift {#package-swift}
|
||||
## Package.swift
|
||||
|
||||
Vapor 4へのアップグレードの最初のステップは、パッケージの依存関係を更新することです。以下は更新されたPackage.swiftファイルの例です。更新された[テンプレートPackage.swift](https://github.com/vapor/template/blob/main/Package.swift)も確認できます。
|
||||
|
||||
|
|
@ -93,7 +93,7 @@ Vaporのパッケージマニフェストは、macOS 10.15以上を明示的に
|
|||
|
||||
将来的にVaporは追加のサポートプラットフォームを追加する可能性があります。あなたのパッケージは、バージョン番号がVaporの最小バージョン要件以上である限り、これらのプラットフォームの任意のサブセットをサポートできます。
|
||||
|
||||
### Xcode {#xcode}
|
||||
### Xcode
|
||||
|
||||
Vapor 4はXcode 11のネイティブSPMサポートを利用しています。これにより、`.xcodeproj`ファイルを生成する必要がなくなりました。Xcodeでプロジェクトのフォルダーを開くと、自動的にSPMが認識され、依存関係が取得されます。
|
||||
|
||||
|
|
@ -108,7 +108,7 @@ Package.swiftを更新したら、Xcodeを閉じてルートディレクトリ
|
|||
|
||||
更新されたパッケージが正常に解決されると、コンパイラエラーが表示されるはずです--おそらくかなりの数です。心配しないでください!修正方法をお見せします。
|
||||
|
||||
## Run {#run}
|
||||
## Run
|
||||
|
||||
最初に行うべきことは、Runモジュールの`main.swift`ファイルを新しい形式に更新することです。
|
||||
|
||||
|
|
@ -126,11 +126,11 @@ try app.run()
|
|||
|
||||
`main.swift`ファイルの内容はAppモジュールの`app.swift`を置き換えるため、そのファイルは削除できます。
|
||||
|
||||
## App {#app}
|
||||
## App
|
||||
|
||||
基本的なAppモジュール構造の更新方法を見てみましょう。
|
||||
|
||||
### configure.swift {#configure-swift}
|
||||
### configure.swift
|
||||
|
||||
`configure`メソッドは`Application`のインスタンスを受け入れるように変更する必要があります。
|
||||
|
||||
|
|
@ -162,11 +162,11 @@ public func configure(_ app: Application) throws {
|
|||
|
||||
ルーティング、ミドルウェア、Fluentなどの設定に関する構文の変更は以下で説明します。
|
||||
|
||||
### boot.swift {#boot-swift}
|
||||
### boot.swift
|
||||
|
||||
`boot`の内容は、アプリケーションインスタンスを受け入れるようになったため、`configure`メソッドに配置できます。
|
||||
|
||||
### routes.swift {#routes-swift}
|
||||
### routes.swift
|
||||
|
||||
`routes`メソッドは`Application`のインスタンスを受け入れるように変更する必要があります。
|
||||
|
||||
|
|
@ -312,7 +312,7 @@ app.myNumber = 42
|
|||
print(app.myNumber) // 42
|
||||
```
|
||||
|
||||
## NIO {#nio}
|
||||
## NIO
|
||||
|
||||
Vapor 4はSwiftNIOの非同期APIを直接公開するようになり、`map`や`flatMap`のようなメソッドをオーバーロードしたり、`EventLoopFuture`のようなタイプをエイリアスしたりしようとしなくなりました。Vapor 3は、SwiftNIOが存在する前にリリースされた初期ベータバージョンとの下位互換性のためにオーバーロードとエイリアスを提供していました。これらは、他のSwiftNIO互換パッケージとの混乱を減らし、SwiftNIOのベストプラクティスの推奨事項により良く従うために削除されました。
|
||||
|
||||
|
|
@ -345,7 +345,7 @@ Vapor 4はSwiftNIOの非同期APIを直接公開するようになり、`map`や
|
|||
}
|
||||
```
|
||||
|
||||
### ByteBuffer {#bytebuffer}
|
||||
### ByteBuffer
|
||||
|
||||
以前は`Data`を使用していた多くのメソッドとプロパティは、NIOの`ByteBuffer`を使用するようになりました。このタイプは、より強力で高性能なバイトストレージタイプです。APIの詳細については、[SwiftNIOのByteBufferドキュメント](https://swiftpackageindex.com/apple/swift-nio/main/documentation/niocore/bytebuffer)を参照してください。
|
||||
|
||||
|
|
@ -499,7 +499,7 @@ let corsMiddleware = CORSMiddleware(configuration: ...)
|
|||
app.middleware = .init()
|
||||
```
|
||||
|
||||
## Fluent {#fluent}
|
||||
## Fluent
|
||||
|
||||
FluentのAPIはデータベースに依存しなくなりました。`Fluent`だけをインポートできます。
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue