Pillowsharp est une bibliothèque conçue pour être utilisée comme client pour Apache CouchDB écrit en .NET Core. L’objectif est d’offrir quelque chose qui peut être utilisé immédiatement sans avoir besoin de configuration ni de beaucoup de code. Pillowsharp utilise la fonctionnalité async
et await
de .NET qui permet à aucun blocage des requêtes vers la base de données.
Pour créer la bibliothèque et exécuter les tests unitaires, veuillez suivre les instructions ci-dessous :
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"'
library/nuget
Veuillez noter : si vous utilisez CouchDB 2.X, il y a quelques modifications dans la configuration d'un environnement de développement, vous pouvez utiliser le fichier dev_couch2_setup.sh/bat. Il configurera une instance de nœud unique avec l'administrateur par défaut utilisé également dans les tests unitaires.
Si vous rencontrez des problèmes à l'étape 5 (exécution de cas de test), veuillez vérifier le fichier CouchSettings.cs si toutes les configurations sont correctes pour votre instance de CouchDB. Si vous avez encore des problèmes ou des questions, veuillez ouvrir un problème ou me contacter.
Soit vous pouvez cloner le référentiel et exécuter le script de build associé (veuillez consulter la section Configuration), soit télécharger une build depuis nuget.org
Toute communication avec CouchDB utilise la classe PillowClient, vous pouvez générer une nouvelle instance comme celle-ci :
var client = = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" ) ) ;
L'exemple ci-dessus utilisera une communication anonyme avec CouchDB (aucun utilisateur requis, configuration CouchDB par défaut). Pour utiliser PillowSharp avec une connexion, la configuration client suivante serait correcte :
var client = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" , new CouchLoginData ( "admin" , "admin" ) , ELoginTypes . TokenLogin ) ) ;
Remarque : vous devez définir le type de connexion comme décrit ici.
Des exemples d'utilisation de certaines fonctions Pillow se trouvent dans l'exemple de projet dans le référentiel.
Pillow vous permet d'utiliser n'importe quelle classe C# comme modèle pour envoyer et recevoir depuis CouchDB. Si vous souhaitez vous faciliter un peu la vie, utilisez CouchDocument
. Cela permet à toutes les fonctions de communication de Pillow de définir automatiquement les indicateurs ID, Révision et Suppression.
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Si le module ci-dessus est utilisé par exemple dans un appel de mise à jour, Pillow mettra à jour le numéro de révision à l'intérieur de l'objet.
Tous les appels acceptent un paramètre pour définir la base de données avec laquelle vous souhaitez parler. Si vous souhaitez éviter de définir cela à chaque appel, vous pouvez également le définir comme paramètre pour votre client :
client . ForcedDatabaseName = "pillow" ;
Une autre façon consiste à définir la base de données pour chaque modèle :
[ DBName ( "pillow" ) ]
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Il est possible d'utiliser les trois méthodes pour définir la base de données, Pillow les utilisera dans l'ordre suivant :
Veuillez également consulter l'exemple de projet.
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
L'exemple ci-dessous suppose que la classe Person
hérite CouchDocument
et utilise l'attribut [DBName("pillow")]
. Il serait également possible de vérifier la nouvelle révision et l'identifiant dans l'objet résultat de l'appel.
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 } " ) ;
}
Obtenez un seul document par identifiant et facultatif par révision :
var result = await client . GetDocument < Person > ( ID = "developer" ) ;
Utilisez le point de terminaison tous les documents dans CouchDB :
await client . GetAllDocuments ( Person . GetType ( ) ) ;
Il existe d'autres façons d'utiliser PillowClient pour obtenir une liste de documents :
L'exemple ci-dessous suppose que la classe Person
hérite CouchDocument
et utilise l'attribut [DBName("pillow")]
. L'important pour cet appel est d'envoyer un identifiant existant à CouchDB.
var result = await client . DeleteDocument ( person ) ;
Les exemples ci-dessous supposent que la classe Person
hérite de CouchDocument
et utilise l'attribut [DBName("pillow")]
.
Fournissez simplement le chemin d’accès au fichier que vous souhaitez joindre au document.
var result = await client . AddAttachment ( person , "fav.image" , "sleepy_owl.JPG" ) ;
Le résultat sera un octet[]
var result = await client . GetAttachement ( person , "fav.image" ) ;
var result = await client . DeleteAttachment ( person , "fav.image" ) ;
PillowSharp prend en charge :
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" ) } ) ;
Vous pouvez demander à CouchDB de générer des identifiants pour vous, le client PillowSharp peut générer automatiquement des identifiants pour les nouveaux documents. Tous peuvent être configurés dans les paramètres par défaut PillowClientSettings
:
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
Pour générer les UUID CouchDB, vous pouvez utiliser l'appel suivant :
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}