Skip to content

7rose/daffodil2

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

25 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

daffodil

总体说明:

  1. graphql的调用地址是统一的,即/graphql

  2. grahpql获取不同的内容,需要在前端执行不行的查询语句(不是sql,是graphql格式)

  3. 后端会直接暴露所有字段除了密码之类的保留字段,但前端用到什么就取什么,不取的字段不会返回.

  4. 流程示例:

    • 后端模型(所有暴露的字段,文件位于lilac项目/graphql下)
    type User {
        id: ID!
        ids: Json! # 身份登录的信息, ids原因可能是有手机号,设备号,其他第三方等
        info: Json # 个人信息
        conf: Json # 配置
        locked: Boolean! # 账号锁
        show: Boolean! # 显示
        created_by: ID # 由谁建立
        created_at: DateTime!
        updated_at: DateTime!
        orgs: [Org!]! # 用户所有属的组织, 注意一个用户可以会属于多个组织
        roles: [Role!]! # 用户角色,同上,角色和组织是对应的
    }
    

    后端暴露方法

    type Query {
        users: [User!]! @all # 用户列表, 返回类型为上面的User数组(外面带[],没有即为空),字段任意取
        user(id: ID @eq): User @find # 按ID查询单个用户,返回用户类型(非数组,外面没有[])
    }
    
    • 前端
    1. 配置连接(即设置统一的接口指向: https://wechat.mooibay.com/graphql)
    2. 查看lilac项目/graphl下面的文件, 直接可以看到所有暴露的字段
      schema.graphql # 包含: 所有查询方法, 变异(造成后端数据变更的)操作方法; 自定义和外部数据类型,如json
      user.graphql # 包含 "user" 所有暴露的字段, 以及其他数据库关系(调用其他模型)
      
    3. 具体的使用
      • 编写查询
      {
          users{
              info
              orgs{
                  id
              }
          }
      }
      
      上述表示执行查询方法 users (对应后端方法), 获取info(用户信息), 和用户所属的组织id; 如果发现前端还需要用户创建时间和组织名称等,则:
      {
          users{
              info
              created_at # 增加
              orgs{
                  id
                  info # 增加
              }
          }
      }
      
      • 将查询/变异的结果写入前端状态管理(大部分情况不需要)

      • 用前端状态管理插件包裹 <widgit>

      • 显示

      • 编写变异与查询相同,注意参数是包裹在input{...},前端需做检验,但后端也会校验,如:ChineseMobile是后端定义,不符合规则的会返回错误

      input SendSmsCodeInput {
          device_id: String!
          mobile: ChineseMobile! 
      }
      
      • 完整的身份认证接口字段
      # input trustMoblieInput { # 前端输入字段: 一键登录,设备id和手机号,后端直接返回token
      #     device_id: String!
      #     mobile: ChineseMobile!
      # }
      
      input SendSmsCodeInput { # 前端输入字段: 发送验证码, 原计划返回广播,后省事直接返回成功
          device_id: String!
          mobile: ChineseMobile!
      }
      
      input GetTokenInput { # 前端输入字段: 使用验证码获取token,返回同一键
          device_id: String!
          mobile: ChineseMobile!
          code: SmsCode!
      }
      
      type SendSmsResault { # 返回结果: registered 是否为已注册用户, success是否发送成功(为省事全部为成功)
          registered: Boolean!
          success: Boolean!
      }
      
      type TokenPayload { # 返回结果: token 
          token: String!
      }
      
      type LogoutResault { # 返回结果: 退出登录
          success: Boolean!
      }
      
      
      • 完整的身份认证方法
      type Mutation {
          # trustMoblie(input: trustMoblieInput! @spread) : TokenPayload! # 表示前端执行 `trustMoblie`, 带 `trustMoblieInput` 定义中需要的字段, `@spread` 为后端方法,前端不管, 冒号后是返回的结果 `TokenPayload`
          sendSmsCode(input: SendSmsCodeInput! @spread) : SendSmsResault! # 以下全部同上
          getToken(input: GetTokenInput! @spread) : TokenPayload!
          logout: LogoutResault!
      }
      

Releases

No releases published

Packages

No packages published

Contributors 4

  •  
  •  
  •  
  •  

Languages