Pillowsharp é uma biblioteca projetada para ser usada como cliente para Apache CouchDB escrita em .NET Core. O objetivo é oferecer algo que possa ser usado imediatamente, sem a necessidade de configuração ou muito código. Pillowsharp faz uso do recurso async
e await
do .NET que não permite nenhum bloqueio de solicitações ao banco de dados.
Para construir a biblioteca e executar os testes unitários, siga as instruções abaixo:
curl -X PUT localhost:5984/_config/admins/admin -d '"admin"'
library/nuget
Observação: se você estiver usando o CouchDB 2.X, há algumas alterações na configuração de um ambiente de desenvolvimento, você pode usar o arquivo dev_couch2_setup.sh/bat. Ele configurará uma instância de nó único com o administrador padrão usado também nos testes unitários.
Caso você encontre problemas na etapa 5 (executando casos de teste), verifique no arquivo CouchSettings.cs se todas as configurações estão corretas para sua instância do CouchDB. Se você ainda tiver problemas ou dúvidas, abra um problema ou entre em contato comigo.
Você pode clonar o repositório e executar o script de compilação relacionado (consulte a seção Configuração) ou baixar uma compilação em nuget.org
Toda comunicação com o CouchDB utiliza a classe PillowClient, você pode gerar uma nova instância como esta:
var client = = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" ) ) ;
O exemplo acima usará comunicação anônima com o CouchDB (não é necessário usuário, configuração padrão do CouchDB). Para usar o PillowSharp com login, a seguinte configuração do cliente seria correta:
var client = new PillowClient ( new BasicCouchDBServer ( "http://127.0.0.1:5984" , new CouchLoginData ( "admin" , "admin" ) , ELoginTypes . TokenLogin ) ) ;
Observação: você precisa definir o tipo de login conforme descrito aqui
Exemplos de uso para algumas funções do Pillow estão localizados no projeto de exemplo no repositório.
Pillow permite que você use qualquer classe C# como modelo para enviar e receber do CouchDB. Se você gostaria de tornar sua vida um pouco mais fácil, acesse CouchDocument
. Isso permite que todas as funções de comunicação do Pillow definam o sinalizador de ID, Revisão e Exclusão automaticamente.
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Se o módulo acima for usado, por exemplo, em uma chamada de atualização, o Pillow atualizará o número de revisão dentro do objeto.
Todas as chamadas aceitam um parâmetro para definir o banco de dados com o qual você deseja conversar. Se quiser evitar definir isso em todas as chamadas, você também pode definir isso como um parâmetro para o seu cliente:
client . ForcedDatabaseName = "pillow" ;
Outra forma é definir o banco de dados para cada modelo:
[ DBName ( "pillow" ) ]
public class TestDocument : CouchDocument
{
public int Fu { get ; set ; }
public string Bar { get ; set ; }
}
Não há problema em usar todas as três maneiras de configurar o banco de dados. O Pillow irá usá-las na seguinte ordem:
Veja também o projeto de exemplo.
if ( ! await client . DbExists ( "pillow" ) )
{
if ( await client . CreateNewDatabase ( "pillow" ) )
Console . WriteLine ( "Database pillow created" ) ;
}
O exemplo abaixo pressupõe que a classe Person
herda CouchDocument
e usa o atributo [DBName("pillow")]
. Também seria possível verificar a nova revisão e id no objeto resultado da chamada.
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 } " ) ;
}
Obtenha um único documento por id e opcional por revisão:
var result = await client . GetDocument < Person > ( ID = "developer" ) ;
Use o endpoint de todos os documentos no CouchDB:
await client . GetAllDocuments ( Person . GetType ( ) ) ;
Existem mais algumas maneiras de usar o PillowClient para obter uma lista de documentos:
O exemplo abaixo pressupõe que a classe Person
herda CouchDocument
e usa o atributo [DBName("pillow")]
. Importante para esta chamada é enviar um ID existente para o CouchDB.
var result = await client . DeleteDocument ( person ) ;
Os exemplos abaixo pressupõem que a classe Person
herda CouchDocument
e usa o atributo [DBName("pillow")]
.
Basta fornecer o caminho do arquivo que você deseja anexar ao documento.
var result = await client . AddAttachment ( person , "fav.image" , "sleepy_owl.JPG" ) ;
O resultado será um byte[]
var result = await client . GetAttachement ( person , "fav.image" ) ;
var result = await client . DeleteAttachment ( person , "fav.image" ) ;
O PillowSharp suporta:
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" ) } ) ;
Você pode pedir ao CouchDB para gerar IDs para você, o PillowSharp Client pode gerar automaticamente IDs para novos documentos. Tudo pode ser configurado dentro das configurações padrão PillowClientSettings
:
public class PillowClientSettings
{
public bool AutoGenerateID { get ; set ; } = true ;
public bool UseCouchUUID { get ; set ; } = false ;
public bool IgnoreJSONNull { get ; set ; } = true ;
}
Para gerar UUIDs do CouchDB, você pode usar a seguinte chamada:
var uuidResponse = await client . GetManyUUIDs ( AmountOfUUIDs : 10 ) ;
foreach ( var id in uuidResponse . UUIDS ) {
Console . WriteLine ( id ) ;
}