在使用REST API时,命名空间的重要性(比较REST和GraphQL之类的)

在一篇名为「使用Rails来创建超简单API」的Qiita文章中,当我在学习API时,遇到了名字空间的概念,于是我进行了总结。

Namespace(名字空间)是什么?

命名空间是为了防止名称冲突而整理图层的概念。使用命名空间,即使名称相同,只要命名空间不同,就不会发生冲突。命名空间类似于姓氏,在有两个名字相同的人(比如太郎)的情况下,由于姓氏不同,例如山田太郎和上田太郎,可以避免概念上的冲突。在代码中如下所示的表示方式。


namespace YAMADA
{
  name = "Taro"
}

namespace UEDA
{
 name = "Taro"
}

put YAMADA::name
 => Taro

put UEDA::name
 => Taro

最终的输出结果是相同的,但从输出的Taro定义元中可以看出,它们来自于不同的地方A和B进行引用。此外,如果从不同的命名空间调用内容,则需要明确指明来源的位置。

REST API与GraphQL的特点和区别

REST API是什么

在调用程序时,遵循以下原则之一的约定。

    1. 为了能够抵御访问集中,实现无状态管理。

 

    1. 预先定义命令系统(如HTTP的GET和POST方法)。

 

    1. 用URL和方法来表示资源。

 

    可以在信息内部包含多个链接到其他信息的能力。

GraphQL是一种数据查询和操作语言。

Facebook社开发的WebAPI规范,被Github、Netflix、Airbnb等公司采用,因此而闻名。由”查询语言”和”模式语言”组成。

在查询语言中,有以下3种类型:
1. 数据获取查询
2. 数据更新变更
3. 用于服务器端事件通知的订阅

Schema语言是一种用于描述GraphQL规范的语言。我们可以像下面这样定义查询的类型。


type Query {
  currentUser: User!
}

type User {
  id: ID!
  name: String!
}

当对如上所示的架构进行下列所示的查询时,将以JSON格式返回内容。


query GetCurrentUser {
  currentUser {
    id
    name
  }
}

以下是GraphQL的主要特点,大致分为三个:
1. 查询和响应结构相似(通过在GraphQL中仅指定所需字段,可以轻松减小响应体的大小)
2. 以模式为中心的思想
3. 单一端点

REST API和GraphQL的比较

端点的数量

在REST中,存在多个终点,而GraphQL的特点是只有一个终点。在REST中,可以通过URL指定终点来明确资源。而GraphQL只有一个终点存在,比如(“POST /graphql”),欲获取的资源需要写在请求的正文中。

URI和HTTPS结构的使用方式

在REST中,我们通过URI或HTTPS来明确访问目标,而在GraphQL中,我们通过查询语言和模式语言来明确访问内容。

访问次数的限制

在REST中,由于考虑到减轻服务器负荷,经常会限制每小时的访问次数。而在GraphQL中,没有这样的限制。因此,需要自行进行负载计算。

在REST API中,设置命名空间是重要的原因。

为了使API URI的设置更加清晰明了,由于REST具有多个终端点,可以设置命名空间。同时,为了统一Namespace的结构,还需要调整目录的结构。

Rails.application.routes.draw do
  namespace 'api' do
    namespace 'v1' do
      resources :posts
    end
  end
end

如果创建这样的命名空间结构,可以设置下面的目录结构。

---- controllers
      --- api
        -- v1
         - posts_controller.rb

顺便说一下,即使不使用命名空间,也可以通过范围来进行设置。
【Ruby on Rails】路由的范围和命名空间之间的区别。

广告
将在 10 秒后关闭
bannerAds