掌握GraphQL自动变压器:优化Amplify-cli字段访问控制
需积分: 5 128 浏览量
更新于2024-11-19
收藏 79KB ZIP 举报
资源摘要信息:"graphql-auto-transformer:amplify-cli的自定义转换器。 它可以控制自动生成字段的可访问性"
GraphQL是一种用于API的查询语言,由Facebook开发,并在2015年开源。它允许客户端准确地请求所需的数据,服务器仅提供这些数据,从而提高性能并减少带宽使用。与REST不同,GraphQL专注于每个API端点返回的数据结构,而不是资源的CRUD操作。
AWS Amplify是一个用于构建移动和Web应用程序的前端JavaScript框架,它通过CLI(命令行接口)简化了从创建到部署的过程。AmplifyCLI提供了一组指令和工具来创建和管理后端服务,其中GraphQL API是其核心功能之一。
在GraphQL API中,我们经常使用Amplify CLI的特定指令来生成模型,如@model、@versioned和@auth等。这些指令自动生成一些字段,例如,使用@model会生成createdAt和updatedAt字段,而@versioned会生成version字段,@auth会生成owner字段。
然而,这些自动生成的字段默认情况下可能会暴露给所有用户,这在某些场景下可能是不合理的。例如,你可能不希望所有用户都能创建或更新某个字段,或者你可能不希望暴露创建时间等字段。
graphql-auto-transformer是一个针对amplify-cli的自定义转换器,通过它可以控制这些自动生成字段的可访问性。它允许你定义指令,比如@auto,这可以附加到FIELD_DEFINITION上,并且它具有两个可选参数:creatable和updatable。这两个参数都接受布尔值,默认为false,表示默认情况下字段不可创建或更新。
- creatable: Boolean = false,表示字段是否可以被创建
- updatable: Boolean = false,表示字段是否可以被更新
例如,你可以定义一个类型为Post的模型,并使用@auto指令来控制字段的可访问性:
```graphql
type Post @model {
id: ID!
text: String
createdAt: AWSDateTime @auto(creatable: false, updatable: false)
}
```
在这个例子中,createdAt字段既不能被创建也不能被更新,这样就可以根据实际业务需求控制字段的可访问性。
动机部分提到了一个目前存在的问题:从GraphQL API访问这些字段的官方方法是将这些类型定义为可为null的类型。这种方式虽然可行,但并不是一个理想的解决方案,因为它没有明确地控制字段的访问权限,而是将决定权留给了客户端。
graphql-auto-transformer的目标是为了解决这个问题,使得开发者能够更精细地控制字段的访问权限,而不是简单地将字段设置为可为null。
在使用graphql-auto-transformer时,需要注意到它的实现依赖于特定的工具和编程语言。根据给定的文件信息,这个转换器是用TypeScript编写的。TypeScript是JavaScript的一个超集,提供了类型系统和对ES6+特性的支持。通过使用TypeScript, graphql-auto-transformer能够提供更加健壮和易于维护的代码,这在大型项目中尤其重要。
最后,关于文件名称"graphql-auto-transformer-master",它表明这可能是一个存档文件,通常在版本控制系统(如Git)中,带有"-master"的名称指的是主分支。在软件开发中,主分支通常包含最新的稳定代码,而其他分支可能用于开发新功能或修复bug。
2021-05-17 上传
2021-02-04 上传
2021-05-13 上传
2021-03-09 上传
2021-05-17 上传
2021-04-29 上传
2021-03-30 上传
2021-05-02 上传
2021-05-09 上传
活宝spring
- 粉丝: 34
- 资源: 4686
最新资源
- Python-DataStructure-GFG-实践
- Starling-Extension-Particle-System:Starling框架的粒子系统,与71squared.com的“粒子设计器”兼容
- 30dayJSPractice:我将按照Wes BosJavaScript 30课程来练习Vanilla JS。 此知识库中有一些个人笔记的解决方案,可帮助我在JS上更强壮
- audiobook-player-alexa
- 新翔ASP培训学校教学管理系统
- Excel模板考场桌面标签.zip
- datepicker:显示日历,然后为彩票选择随机日期
- EPANET:供水系统液压和水质分析工具包
- MAX31855温度检测_MAX31855
- SimpleMachineLearningExp:我与机器学习的第一次互动!
- A-Recipe:Soorji ka Halwa的食谱。 享受!
- 无限跑者游戏
- DesignPattern:设计模式小Demo
- BMITaven.rar
- manga4all-ui:manga4all-ui
- InjectableGenericCameraSystem:这是一个通用的相机系统,可用作相机在游戏内拍摄屏幕截图的基础。 该系统的主要目的是通过用我们自己的值覆盖其摄像机结构中的值来劫持游戏中的3D摄像机,以便我们可以控制摄像机的位置,俯仰角值,FoV和摄像机的外观向量