PHP集成Notion API:数据库查询过滤实战指南

碧海醫心
发布: 2025-10-08 10:35:56
原创
995人浏览过

PHP集成Notion API:数据库查询过滤实战指南

本文旨在解决PHP通过cURL调用Notion API进行数据库查询时,因请求体结构不当导致过滤无效的问题。核心内容是阐明Notion API的POST /v1/databases/{database_id}/query接口要求将所有过滤条件封装在filter键下,并提供正确的PHP代码示例,确保开发者能精确获取所需数据。

理解Notion API数据库查询

notion api提供了强大的数据库查询能力,允许开发者通过post /v1/databases/{database_id}/query端点检索数据库中的页面。这个端点支持复杂的过滤和排序逻辑,但前提是请求体(request body)的结构必须严格遵循notion api文档的规定。

当我们需要根据特定属性(如标题、文本、数字等)来筛选数据库条目时,所有的过滤条件都必须嵌套在一个名为filter的顶级键之下。如果过滤条件直接作为请求体的根元素,Notion API可能会将其忽略,从而返回数据库中的所有数据,而不是期望的过滤结果。

错误的请求体结构示例

在尝试查询Notion数据库时,一个常见的错误是将过滤条件直接放置在请求体的根级别,例如:

// 错误的请求数据结构示例
$data_array =
[
  "property"=>"DataElement",
  "title"=>["equals"=>"bigHouse"]
];

$data = json_encode($data_array);
// 此时 $data 的输出可能为:{"property":"DataElement","title":{"equals":"bigHouse"}}
// 这种结构不符合Notion API的过滤要求
登录后复制

尽管json_encode后的字符串看起来是有效的JSON,并且包含了property和title等过滤关键字,但由于它们没有被filter键包裹,Notion API会将其视为无效的过滤参数,从而返回数据库中的所有条目。

正确的请求体结构

根据Notion API的文档,所有过滤条件都必须封装在filter键之下。对于一个简单的属性过滤,例如查询名为"DataElement"的标题属性等于"bigHouse"的条目,正确的$data_array结构应该如下:

Notion AI
Notion AI

Notion是一款集成了笔记、知识库、数据表格、看板、日历等多种能力于一体的应用程序,它既可供个人使用,也可以与他人进行跨平台协作。

Notion AI 76
查看详情 Notion AI

立即学习PHP免费学习笔记(深入)”;

// 正确的请求数据结构
$data_array =
[
  'filter' =>
    [
      "property"=>"DataElement",
      "title"=>["equals"=>"bigHouse"]
    ]
];

$data = json_encode($data_array);
// 此时 $data 的输出为:{"filter":{"property":"DataElement","title":{"equals":"bigHouse"}}}
// 这种结构才能被Notion API正确解析并执行过滤
登录后复制

PHP cURL实现Notion数据库查询与过滤

下面是一个完整的PHP cURL示例,展示了如何使用正确的请求体结构来查询并过滤Notion数据库:

<?php

// 数据库和API连接信息(请替换为您的实际值)
$databaseId = "YOUR_DATABASE_ID"; // 您的Notion数据库ID
$url = "https://api.notion.com/v1/databases/$databaseId/query"; // Notion API查询端点
$token = 'YOUR_NOTION_INTEGRATION_TOKEN'; // 您的Notion集成令牌
$version = '2021-08-16'; // Notion API版本

// 构建包含过滤条件的请求数据
// 目标:查询名为 "DataElement" 的标题属性等于 "bigHouse" 的条目
$data_array =
[
  'filter' =>
    [
      "property"=>"DataElement", // 要过滤的属性名称
      "title"=>["equals"=>"bigHouse"] // 过滤条件:标题等于 "bigHouse"
    ]
];

$data = json_encode($data_array); // 将PHP数组编码为JSON字符串

// 初始化cURL会话
$ch = curl_init();

// 设置cURL选项
curl_setopt($ch, CURLOPT_URL, $url); // 设置请求URL
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 将响应作为字符串返回,而不是直接输出
curl_setopt($ch, CURLOPT_POST, true); // 设置为POST请求
curl_setopt($ch, CURLOPT_POSTFIELDS, $data); // 设置POST请求体数据

// 设置HTTP头部,包括认证信息和API版本
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
    'Authorization: Bearer ' . $token, // API认证令牌
    'Notion-Version: ' . $version, // 指定Notion API版本
    'Content-Type: application/json' // 声明请求体为JSON格式
));

// 注意:以下两行用于禁用SSL证书验证,仅在开发或特定环境下使用,
// 生产环境中强烈建议启用并正确配置SSL证书验证以确保安全。
// curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
// curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);

// 执行cURL请求
$resp = curl_exec($ch);

// 检查cURL请求是否发生错误
if($e = curl_error($ch))
{
    echo "cURL Error: " . $e;
} else
{
    // 解码JSON响应
    $decoded = json_decode($resp, true);
    echo "<h2>查询结果:</h2>";
    var_dump($decoded); // 打印解码后的数据
}

// 打印发送的原始JSON数据(用于调试)
echo "<br><h2>发送的JSON数据:</h2>";
echo $data;

// 关闭cURL会话
curl_close($ch);

?>
登录后复制

注意事项与最佳实践

  1. API文档是黄金法则: 始终参考Notion官方API文档(https://developers.notion.com/reference/post-database-query)来了解最新的请求体结构、过滤选项和数据类型。Notion API支持多种复杂的过滤条件,如组合过滤(and/or)、数字过滤、日期过滤、复选框过滤等,所有这些都应嵌套在filter键下。
  2. 安全性:
    • API令牌保护: 绝不将API令牌硬编码在公共代码库中。应使用环境变量配置文件或密钥管理服务来存储和访问敏感信息。
    • SSL验证: 在生产环境中,务必启用cURL的SSL证书验证(即不要设置CURLOPT_SSL_VERIFYHOST, 0和CURLOPT_SSL_VERIFYPEER, 0)。禁用SSL验证会使您的应用程序容易受到中间人攻击。
  3. 错误处理:
    • cURL错误: 检查curl_error($ch)以捕获网络或cURL配置相关的错误。
    • API响应错误: Notion API会在响应中返回错误信息(例如,HTTP状态码非2xx,或响应体中包含"object": "error")。在解码JSON后,应检查这些错误信息以进行适当的处理。
  4. Content-Type头: 确保在HTTP头部中设置Content-Type: application/json,告知Notion API请求体是JSON格式。
  5. Notion-Version头: 指定Notion-Version头是最佳实践,它确保您的请求与特定API版本兼容,避免未来API更新可能导致的不兼容问题。

总结

通过Notion API查询数据库并实现过滤的关键在于正确构造请求体。核心要点是将所有过滤条件封装在一个名为filter的顶级JSON键中。遵循Notion API文档的规范,并结合PHP cURL的正确使用,开发者可以高效且精确地从Notion数据库中检索所需数据。同时,在实际应用中,务必重视API令牌的安全性以及SSL证书的验证,以构建健壮和安全的集成方案。

以上就是PHP集成Notion API:数据库查询过滤实战指南的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号