使用postman调试Appwrite的API接口
API的url格式
http://localhost/v1/databases/{{DATABASE_ID}}/collections/{{USER_COLLECTION_ID}}/documents
# 示例
http://localhost/v1/databases/668161b0000dd3247315/collections/668161be0012a9b9df13/documents
为什么最后的地址是documents,因为它表示一条记录,而collection则表示是数据库表
假如在本地开发,则接口地址是localhost,如果是注册的Appwrite,则需要改为其服务器地址,比如 https://cloud.appwrite.io/
每个链接都需要的请求头:
X-Appwrite-Project:{{PROJECT_ID}}
# 如:667e0fb0000845edcdd8
X-Appwrite-Key:{{API_KEY}}
# 如:
a19708d4b67f2fe8f5e3307d0bea4d7c1b8cf2693f598cc4a91e17be6adfefa9fdf97b67aa14a7fcd29243db78701c6c15a17fb6c3265cb1eec8d6815a08f27ac73d8523db6e4b590e8055c2f0d2185574df318fc2710250ccba44df4fa5c59534b2e76394b4f2e783044057593380b3b01cd414c5e58bec8f06c52607b7fce0
注意:
前者,PROJECT_ID
,可以在当前项目中复制
后者,API_KEY
,需要在该项目中生成:
post请求(Create)
新建一个post请求,raw-json:
{
"documentId": "unique()",
"data": {
"name": "John Doe2",
"age": 20,
"sex":"0"
}
}
以上写法基本固定,字段来自于该表下的collection字段。
字段也是在自己设计数据库时创建的。
get请求(Read)
get请求除了那2个必须的请求头外,无序任何参数。
比如直接将上面的post请求改为get请求,即可获取到所有的用户数据:
http://localhost/v1/databases/{{DATABASE_ID}}/collections/{{USER_COLLECTION_ID}}/documents
返回所有的用户数据。
单个用户:
http://localhost/v1/databases/{{DATABASE_ID}}/collections/{{USER_COLLECTION_ID}}/documents/{{documents_id}}
返回该用户的数据。
patch请求(不支持put请求)(Update)
作用:更新单个用户的数据:
url:
http://localhost/v1/databases/{{DATABASE_ID}}/collections/{{USER_COLLECTION_ID}}/documents/{{documents_id}}
data:
{
"data": {
"name": "John-upde",
"age": 20,
"sex":"0"
}
}
返回被更新后的数据。
delete请求
作用:删除指定用户的数据:
url:
http://localhost/v1/databases/{{DATABASE_ID}}/collections/{{USER_COLLECTION_ID}}/documents/{{documents_id}}
入参:无
返回值:无
The server successfully processed the request, but is not returning any content.
遇到的问题
在请求时,遇到过个问题:
1、没有权限
我的原因是因为在headers
中的一个参数PROJECT_ID
没有获取对,因为我在postman
里,新建的PROJECT_ID
是变量,该变量的值是需要init
和current
都要有值。
2、提示database
没有找到
这是因为我的url地址不正确,漏了database_id。也就是我写成的如下地址:
http://localhost/v1/database/collections/{{USER_COLLECTION_ID}}/documents
正确的应该是:
http://localhost/v1/databases/{{DATABASE_ID}}/collections/{{USER_COLLECTION_ID}}/documents
参考的解决资料链接:https://appwrite.io/threads/1137978952976183296
3、在post一条记录时,提示 "message": "Param \"documentId\" is not optional.",
这是因为在创建一条记录(documents)时,需要生成该条记录的id。
解决方式,就是在post的数据中新增一个入参:
{
"documentId": "unique()", //这个是新增的
"data": {
"name": "John Doe2",
"age": 20,
"sex":"0"
}
}
与supabase的区别
从目前来看,supabase更好用,因为数据库设计更加人性化,且支持可视化和SQL生成。
与strapi的区别
因为strapi是headless CMS,看起来不太容易上手,但是只要你知道如何使用,那么它更好用,更适合前端使用或不太复杂的web应用,因为也有非常灵活的可视化字段设计,而且能提供可视化的数据库关联字段等。
所以做不太复杂,适合国情的还是选择strapi了。
strapi v5马上就要发布,精简了API设计,省去了一些不必要的属性嵌套。
更加符合我们的使用习惯。我已经出了strap v5的使用教程,请移步到该目录查看。
后续我会考虑录制strapi v5视频,帮助更多的人上手。