RavenDB起步--客户端API(一)

简介: 上一小节我们演示了一个简单的实例,从本篇文章开始我将通过两篇文章带领大家学习一下 RavenDB 常用客户端 API。

上一小节我们演示了一个简单的实例,从本篇文章开始我将通过两篇文章带领大家学习一下 RavenDB 常用客户端 API。

Document Store

Document Store 是客户端 API 的主要入口点,它包括了包含所有客户端配置,包括序列化配置、故障转移行为、缓存选项等内容。一般来说每个单例应用程序都会拥有一个Document Store实例,因此 Document Store 是线程安全的,它初始化代码类似于下面这样:

public class DocumentStoreHolder
{
    private readonly static Lazy<IDocumentStore> _store = 
        new Lazy<IDocumentStore>(CreateDocumentStore);
    private static IDocumentStore CreateDocumentStore()
    {
        var documentStore = new DocumentStore
        {
            Urls = // urls of the nodes in the RavenDB Cluster
            {
                "https://ravendb-01:8080",
                "https://ravendb-02:8080",
                "https://ravendb-03:8080",
            },
            Certificate = 
                new X509Certificate2("tasks.pfx"),
                    Database = "Tasks",
        };
        documentStore.Initialize();
        return documentStore;
    }
    public static IDocumentStore Store
    {
        get { return _store.Value; }
    }
}

上面的代码中使用 Lazy 是为了保证 Document Store 只能被创建一次,因此在这里不需要担心线程安全和双重锁定问题。

约定

RavenDB 默认已经做了一些列的约定,这些约定既包含怎么保存内容,也包含如何序列化实体成文文档。在小型项目中使用这些默认的约定基本上已经满足了,但是对于中型项目甚至大型项目来说默认约定就显得有些鸡肋,因此在需要自定约定的情况下,我们可以调用 DocumentStore.Conventions 方法来设置符合项目情况的约定。比如说 RavenDB 默认使用 Id 作为文档内容的 ID ,但是我们并不希望这么做,我们希望使用实体名称加Id的形式来产生ID,那么我们可以这样定义:

documentStore.Conventions.FindIdentityProperty = 
    prop => prop.Name == prop.DeclaringType.Name + "Id";

这个例子只是展现 RavenDB 可以实现自定义约定,更多的属性我将会在后续课程中讲解。

身份验证

身份验证是我们在开发项目时必须要考虑到的问题,RavenDB 完全支持身份认证这个概念。一般来说我们的开发环境是如果用在线上的话是不安全,我们需要以安全的模式在线上环境中运行 RavenDB ,这时我们可以使用 RavenDB 支持的 x509 客户端证书来进行身份验证。这种认证方式表示出于特定原因授予数据库的特定访问权限。X509 是一种自然的验证方式,并且一般来说 X509 客户端证书是基于每个应用程序/角色授予的。具体的身份认证我将会在后面的专题中进行详细讲解。

Tip:默认情况下,RavenDB 会拒绝 localhost 在不安全模式下访问任何内容。这样做是出于安全原因,防止管理员在未经网络身份验证的情况下暴露 RavenDB。如果在禁用身份验证的情况下配置非本地 URL,那么 RavenDB 会显示错误页面,解释情况并提供有关如何解决问题的说明。

目录
相关文章
|
2月前
|
前端开发 JavaScript API
基于React的简易REST API客户端设计与实现
基于React的简易REST API客户端设计与实现
49 3
|
2月前
|
消息中间件 算法 Java
客户端限流器和服务端API限流器的区别
客户端限流器和服务端API限流器在限流对象、实现方式以及应用场景等方面存在显著差异。客户端限流器主要关注于保护客户端资源和控制客户端行为,而服务端API限流器则更注重于保护服务端系统和确保服务的高可用性。
43 3
|
2月前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
【4月更文挑战第11天】ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
47 11
|
2月前
|
JSON 测试技术 API
Python的Api自动化测试使用HTTP客户端库发送请求
【4月更文挑战第18天】在Python中进行HTTP请求和API自动化测试有多个库可选:1) `requests`是最流行的选择,支持多种请求方法和内置JSON解析;2) `http.client`是标准库的一部分,适合需要低级别控制的用户;3) `urllib`提供URL操作,适用于复杂请求;4) `httpx`拥有类似`requests`的API,提供现代特性和异步支持。根据具体需求选择,如多数情况`requests`已足够。
34 3
|
2月前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
23 0
|
2月前
|
JSON Java API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
Java 编程问题:十三、HTTP 客户端和 WebSocket API
164 0
|
2月前
|
Java API Apache
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
ZooKeeper【基础 03】Java 客户端 Apache Curator 基础 API 使用举例(含源代码)
36 0
|
11天前
|
NoSQL 安全 API
如何有效提升 API 接口的安全性?
**API安全关键在于验证和防刷。通过排序参数、生成签名和MD5加密确保请求合法性。使用Redis限制请求频率,防止接口被恶意刷取。验证和防刷策略结合,保护API免受攻击和滥用。**
29 0
|
16天前
|
JSON 安全 API
如何高效编写API接口:以Python与Flask为例
构建RESTful API的简明教程:使用Python的Flask框架,从环境准备(安装Python,设置虚拟环境,安装Flask)到编写首个API(包括获取用户列表和单个用户信息的路由)。运行API服务器并测试在`http://127.0.0.1:5000/users`。进阶话题包括安全、数据库集成、API文档生成和性能优化。【6月更文挑战第27天】
40 7