Pillowsharp es una biblioteca diseñada para usarse como cliente para Apache CouchDB escrita en .NET Core. El objetivo es ofrecer algo que se pueda utilizar de inmediato sin necesidad de configuración ni mucho código. Pillowsharp utiliza la función async
y await
de .NET que no permite bloquear solicitudes a la base de datos.
Para construir la biblioteca y ejecutar las pruebas unitarias, siga las instrucciones a continuación:
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"'
library/nuget
Tenga en cuenta: si está utilizando CouchDB 2.X, hay algunos cambios en la configuración de un entorno de desarrollo; puede utilizar el archivo dev_couch2_setup.sh/bat. Configurará una instancia de un solo nodo con el administrador predeterminado utilizado también en las pruebas unitarias.
En caso de que encuentre problemas en el paso 5 (ejecutar casos de prueba), verifique el archivo CouchSettings.cs si todas las configuraciones son correctas para su instancia de CouchDB. Si aún tiene problemas o preguntas, abra un problema o contácteme.
Puede clonar el repositorio y ejecutar el script de compilación relacionado (consulte la sección Configuración) o descargar una compilación desde nuget.org.
Toda comunicación con CouchDB utiliza la clase PillowClient, puedes generar una nueva instancia como esta:
var client = = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" ) ) ;
El ejemplo anterior utilizará comunicación anónima con CouchDB (no se requiere usuario, configuración predeterminada de CouchDB). Para utilizar PillowSharp con un inicio de sesión, la siguiente configuración del cliente sería correcta:
var client = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" , new CouchLoginData ( "admin" , "admin" ) , ELoginTypes . TokenLogin ) ) ;
Tenga en cuenta: debe configurar el tipo de inicio de sesión como se describe aquí
El uso de ejemplos de algunas funciones de Pillow se encuentra en el proyecto de ejemplo en el repositorio.
Pillow le permite utilizar cualquier clase de C# como modelo para enviar y recibir desde CouchDB. Si desea hacer su vida un poco más fácil, utilice CouchDocument
. Esto permite que todas las funciones de comunicación de Pillow establezcan automáticamente el indicador ID, Revisión y Eliminación.
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Si el módulo anterior se usa, por ejemplo, en una llamada de actualización, Pillow actualizará el número de versión dentro del objeto.
Todas las llamadas aceptan un parámetro para definir la base de datos con la que deseas hablar. Si desea evitar configurar esto en cada llamada, también puede configurarlo como parámetro para su cliente:
client . ForcedDatabaseName = "pillow" ;
Otra forma es configurar la base de datos para cada modelo:
[ DBName ( "pillow" ) ]
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Está bien usar las tres formas de configurar la base de datos; Pillow las usará en el siguiente orden:
Consulte también el proyecto de ejemplo.
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
El siguiente ejemplo supone que la clase Person
contiene CouchDocument
y utiliza el atributo [DBName("pillow")]
. También sería posible verificar la nueva revisión y la identificación en el objeto de resultado de la llamada.
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 } " ) ;
}
Obtenga un documento único por id y opcional por revisión:
var result = await client . GetDocument < Person > ( ID = "developer" ) ;
Utilice el punto final de todos los documentos en CouchDB:
await client . GetAllDocuments ( Person . GetType ( ) ) ;
Hay otras formas de utilizar PillowClient para obtener una lista de documentos:
El siguiente ejemplo supone que la clase Person
contiene CouchDocument
y utiliza el atributo [DBName("pillow")]
. Lo importante para esta llamada es enviar una identificación existente a CouchDB.
var result = await client . DeleteDocument ( person ) ;
Los siguientes ejemplos suponen que la clase Person
hereda CouchDocument
y utiliza el atributo [DBName("pillow")]
.
Simplemente proporcione la ruta al archivo que desea adjuntar al documento.
var result = await client . AddAttachment ( person , "fav.image" , "sleepy_owl.JPG" ) ;
El resultado será un byte[]
var result = await client . GetAttachement ( person , "fav.image" ) ;
var result = await client . DeleteAttachment ( person , "fav.image" ) ;
PillowSharp admite:
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" ) } ) ;
Puede pedirle a CouchDB que genere identificaciones por usted; el cliente PillowSharp puede generar automáticamente identificaciones para documentos nuevos. Todos los que se pueden configurar dentro de PillowClientSettings
son los siguientes:
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
Para generar UUID de CouchDB, puede utilizar la siguiente llamada:
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}