Pillowsharp は、.NET Core で書かれた Apache CouchDB のクライアントとして使用するように設計されたライブラリです。目標は、設定や大量のコードを必要とせずにすぐに使用できるものを提供することです。 Pillowsharp は、.NET のasync
およびawait
機能を利用し、DB へのリクエストをブロックすることを許可しません。
ライブラリを構築して単体テストを実行するには、以下の手順に従ってください。
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"'
を使用してカウチの管理者を追加しますlibrary/nuget
使用できるようになります。注: CouchDB 2.X を使用している場合は、dev_couch2_setup.sh/bat ファイルを使用できる開発環境の構成にいくつかの変更があります。単体テストでも使用されるデフォルトの管理者を使用して単一ノード インスタンスを構成します。
ステップ 5 (テスト ケースの実行) で問題が発生した場合は、CouchSettings.cs ファイルをチェックして、CouchDB のインスタンスのすべての構成が正しいかどうかを確認してください。まだ問題や質問がある場合は、問題を開くか、私に連絡してください。
リポジトリのクローンを作成して関連するビルド スクリプトを実行するか (「セットアップ」セクションを参照)、nuget.org からビルドをダウンロードすることができます。
CouchDB とのすべての通信は PillowClient クラスを使用します。次のように新しいインスタンスを生成できます。
var client = = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" ) ) ;
上記の例では、CouchDB との匿名通信を使用します (ユーザーは不要、デフォルトの CouchDB セットアップ)。ログインで PillowSharp を使用するには、次のクライアント設定が適切です。
var client = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" , new CouchLoginData ( "admin" , "admin" ) , ELoginTypes . TokenLogin ) ) ;
注:ここで説明されているようにログイン タイプを設定する必要があります。
一部の Pillow 関数の使用例は、リポジトリのサンプル プロジェクトにあります。
Pillow を使用すると、任意の C# クラスを CouchDB と送受信するためのモデルとして使用できます。生活を少し楽にしたい場合は、 CouchDocument
を使用してください。これにより、Pillow のすべての通信機能で ID、リビジョン、削除フラグが自動的に設定されるようになります。
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
上記のモジュールが更新呼び出しなどで使用される場合、Pillow はオブジェクト内のリビジョン番号を更新します。
すべての呼び出しは、通信するデータベースを定義するパラメータを受け取ります。呼び出しごとにこれを設定することを避けたい場合は、これをクライアントのパラメータとして設定することもできます。
client . ForcedDatabaseName = "pillow" ;
もう 1 つの方法は、モデルごとにデータベースを設定することです。
[ DBName ( "pillow" ) ]
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
データベースを設定する 3 つの方法すべてを使用しても問題ありません。Pillow はそれらを次の順序で使用します。
サンプルプロジェクトもご覧ください。
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
以下の例では、 Person
クラスがCouchDocument
を継承し、 [DBName("pillow")]
属性を使用すると想定しています。呼び出しの結果オブジェクト内の新しいリビジョンと ID を確認することもできます。
person = new Person ( ) { Name = "Dev" , LastName = "Owl" , Role = "Developer" } ;
var result = await client . CreateANewDocument ( person ) ;
if ( result . Ok )
{
Console . WriteLine ( $ "Document created with id: { person . ID } and Rev: { person . Rev } " ) ;
}
ID によって単一のドキュメントを取得し、オプションでリビジョンによって単一のドキュメントを取得します。
var result = await client . GetDocument < Person > ( ID = "developer" ) ;
CouchDB のすべてのドキュメント エンドポイントを使用します。
await client . GetAllDocuments ( Person . GetType ( ) ) ;
PillowClient を使用してドキュメントのリストを取得する方法は他にもいくつかあります。
以下の例では、 Person
クラスがCouchDocument
を継承し、 [DBName("pillow")]
属性を使用すると想定しています。この呼び出しで重要なのは、既存の ID を CouchDB に送信することです。
var result = await client . DeleteDocument ( person ) ;
以下の例では、 Person
クラスがCouchDocument
を継承し、 [DBName("pillow")]
属性を使用すると想定しています。
ドキュメントに添付したいファイルへのパスを指定するだけです。
var result = await client . AddAttachment ( person , "fav.image" , "sleepy_owl.JPG" ) ;
結果は byte[] になります。
var result = await client . GetAttachement ( person , "fav.image" ) ;
var result = await client . DeleteAttachment ( person , "fav.image" ) ;
ピローシャープは以下をサポートします。
var designDoc = new CouchDesignDocument ( ) ;
designDoc . ID = "testDesignDoc" ;
designDoc . AddView ( "test" , "function (doc) {emit(doc._id, 1);}" ) ;
designDoc . AddView ( "testReduce" , "function (doc) {emit(doc._id, 1);}" , "_count" ) ;
var result = await client . UpsertDesignDocument ( designDoc ) ;
var dbDocument = await client . GetDesignDocument ( ID ) ;
var result = await client . GetView < dynamic > ( ID , "viewname" , new [ ] { new KeyValuePair < string , object > ( "reduce" , "false" ) } ) ;
CouchDB に ID を生成するよう依頼することができ、PillowSharp クライアントは新しいドキュメントの ID を自動生成できます。すべてはPillowClientSettings
内で構成できます。デフォルト設定は次のとおりです。
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
CouchDB UUID を生成するには、次の呼び出しを使用できます。
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}