Pillowsharp adalah perpustakaan yang dirancang untuk digunakan sebagai klien untuk Apache CouchDB yang ditulis dalam .NET Core. Tujuannya adalah untuk menawarkan sesuatu yang dapat langsung digunakan tanpa memerlukan konfigurasi atau banyak kode. Pillowsharp memanfaatkan fitur async
dan await
dari .NET yang memungkinkan tidak ada yang memblokir permintaan ke DB.
Untuk membangun perpustakaan dan menjalankan pengujian unit, ikuti petunjuk di bawah:
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"'
library/nuget
Harap dicatat: Jika Anda menggunakan CouchDB 2.X ada beberapa perubahan pada konfigurasi lingkungan pengembangan, Anda dapat menggunakan file dev_couch2_setup.sh/bat. Ini akan mengonfigurasi satu instance node dengan admin default yang juga digunakan dalam pengujian unit.
Jika Anda mengalami masalah pada langkah 5 (menjalankan kasus pengujian), silakan periksa file CouchSettings.cs apakah semua konfigurasi sudah benar untuk instance CouchDB Anda. Jika Anda masih memiliki masalah atau pertanyaan, silakan buka masalah atau hubungi saya.
Anda dapat mengkloning repositori dan menjalankan skrip build terkait (silakan lihat bagian Penyiapan) atau unduh build dari nuget.org
Semua komunikasi dengan CouchDB menggunakan kelas PillowClient, Anda dapat membuat instance baru seperti ini:
var client = = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" ) ) ;
Contoh di atas akan menggunakan komunikasi anonim dengan CouchDB (tidak diperlukan pengguna, pengaturan CouchDB default). Untuk menggunakan PillowSharp dengan login, pengaturan klien berikut ini sudah benar:
var client = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" , new CouchLoginData ( "admin" , "admin" ) , ELoginTypes . TokenLogin ) ) ;
Harap dicatat: Anda perlu mengatur jenis Login seperti yang dijelaskan di sini
Contoh penggunaan untuk beberapa fungsi Pillow terletak di proyek contoh di repositori.
Pillow memungkinkan Anda menggunakan kelas C# apa pun sebagai model untuk mengirim dan menerima dari CouchDB. Jika Anda ingin membuat hidup Anda sedikit lebih mudah, dapatkan dari CouchDocument
. Hal ini memungkinkan semua fungsi komunikasi Pillow untuk mengatur bendera ID, Revisi dan Hapus secara otomatis.
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Jika modul di atas digunakan misalnya dalam panggilan pembaruan, Pillow akan memperbarui nomor revisi di dalam objek.
Semua panggilan menerima parameter untuk menentukan database yang ingin Anda ajak bicara. Jika Anda ingin menghindari pengaturan ini pada setiap panggilan, Anda juga dapat mengatur ini sebagai parameter untuk klien Anda:
client . ForcedDatabaseName = "pillow" ;
Cara lain adalah dengan mengatur database untuk setiap model:
[ DBName ( "pillow" ) ]
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Anda boleh menggunakan ketiga cara untuk mengatur database, Pillow akan menggunakannya dengan urutan sebagai berikut:
Silakan lihat juga contoh proyeknya.
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
Contoh di bawah ini mengasumsikan bahwa kelas Person
menggunakan CouchDocument
dan menggunakan atribut [DBName("pillow")]
. Dimungkinkan juga untuk memeriksa revisi dan id baru di objek hasil dari panggilan.
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 } " ) ;
}
Dapatkan satu dokumen berdasarkan id dan opsional berdasarkan revisi:
var result = await client . GetDocument < Person > ( ID = "developer" ) ;
Gunakan titik akhir semua dokumen di CouchDB:
await client . GetAllDocuments ( Person . GetType ( ) ) ;
Ada beberapa cara lain yang dapat Anda gunakan untuk menggunakan PillowClient untuk mendapatkan daftar dokumen:
Contoh di bawah ini mengasumsikan bahwa kelas Person
menggunakan CouchDocument
dan menggunakan atribut [DBName("pillow")]
. Penting untuk panggilan ini adalah mengirimkan ID yang ada ke CouchDB.
var result = await client . DeleteDocument ( person ) ;
Contoh di bawah ini mengasumsikan bahwa kelas Person
menggunakan CouchDocument
dan menggunakan atribut [DBName("pillow")]
.
Cukup berikan jalur ke file yang ingin Anda lampirkan ke dokumen.
var result = await client . AddAttachment ( person , "fav.image" , "sleepy_owl.JPG" ) ;
Hasilnya adalah satu byte[]
var result = await client . GetAttachement ( person , "fav.image" ) ;
var result = await client . DeleteAttachment ( person , "fav.image" ) ;
Dukungan PillowSharp:
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" ) } ) ;
Anda dapat meminta CouchDB untuk membuatkan ID untuk Anda, Klien PillowSharp dapat secara otomatis membuat ID untuk dokumen baru. Semua dapat dikonfigurasi di dalam pengaturan default PillowClientSettings
adalah:
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
Untuk menghasilkan UUID CouchDB Anda dapat menggunakan panggilan berikut:
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}