Next.js,通过API路由与数据库交互,而不是直接与数据库交互

r6hnlfcb  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(509)

我正在使用Supabase作为后端服务创建Next.js应用程序,但在此场景中Firebase或MongoDB将是相同的。我读过几篇关于Next.js API路由的文章,其中一些文章使用这些路由完成与数据库的交互,但我还是不知道I don "我不明白使用API路由与我的数据库交互或直接在我的组件上编写这些查询之间的区别,例如:
向数据库中插入一些内容。我有一个表单,在提交时会向数据库中添加一个项目:

const handleSubmit = async (e) => {
    e.preventDefault();
    ...

        const { data: itemData, error } = await supabase
            .from('items')
            .insert({
                username: user.username,
                title,
                description,
            })
            .select();
            ...

或者:

const handleSubmit = async (e) => {
    e.preventDefault();
    ...

        fetch('api/createItem', {
            method: 'POST',
            body: JSON.stringify(newItem),
            headers: {
                'Content-Type': 'application/json',
            },
        })
            .then((response) => response.json())
            .then((data) => console.log(data));

然后在API路径上,我会将项目插入到数据库中。两者都起作用,都做同样的事情,在这里使用API路径有什么好处吗?我看到过不同的文章使用两者,从来没有澄清为什么使用API路径来做这件事是有意义的。

zf9nrax1

zf9nrax11#

所以我把这个问题理解为
“为什么我应该使用NextJS API路由与Supabase Restlike API通信,而不是直接从客户端代码调用它?”
如果不使用SSR和Nextjs,直接使用Supabase API会更容易实现,您只需使用Supabase客户端就可以了。
我对此的看法是:像Supabase这样的restful API(实际上是Postgrest)并不完全适合客户端应用程序开发。它的目的是提供一种统一的方式来执行不同客户端的crud操作。完整的API不应该在互联网上公开,因为这会增加攻击向量。
通过使用NextJS API Routes(或使用serverSideProps),您将有机会实现数据获取,这更适合您的应用需求,而不是试图满足API端点的形状。
然而:您可能会发现自己在许多情况下只是代理请求到API,您会问自己:为什么我不直接这样做:D

相关问题