Java with GraphQL
· One min read
//library.googleapis.com/shelves/shelf1/books/book2shelves/shelf1/books/book2files/source/py/parser.pylowerCamel 形式
evidence,weathervalues -> rowValues//calendar.googleapis.com/users/john smith/events/123https://calendar.googleapis.com/v3/users/john%20smith/events/12namedisplay_name, first_name/(bucket, object) 或 (user, album, photo) 的形式name 而不使用 id
name 的定义会非常混淆, 保留 name 使得开发者选择一个更合适的名字, 例如 display_name, title| API Service Name | Collection ID | Resource ID | Collection ID | Resource ID |
|---|---|---|---|---|
| //storage.googleapis.com | /buckets | /bucket-id | /objects | /object-id |
| API Service Name | Collection ID | Resource ID | Resource ID | Resource ID |
|---|---|---|---|---|
| //mail.googleapis.com | /users | /name@example.com | /settings | /customFrom |
| Std.Method | HTTP Mapping | HTTP Request Body | HTTP Response Body |
|---|---|---|---|
| List | GET <collection URL> | N/A | Resource* list |
| Get | GET <resource URL> | N/A | Resource* |
| Create | POST <collection URL> | Resource | Resource* |
| Update | PUT or PATCH <resource URL> | Resource | Resource* |
| Delete | DELETE <resource URL> | N/A | google.protobuf.Empty** |
https://service.name/v1/some/resource/name:customVerbPOST 方法GETPATCH, 也许会使用其他方法, 但应该遵从 HTTP 语义GET 方法, 必须要求请求幂等, 不会有副作用
GET:customVerb 结束body: "*", 应该将所有字段映射到请求消息上body 语句| Method Name | Custom verb | HTTP verb | 备注 |
|---|---|---|---|
| Cancel | :cancel | POST | 取消一个未完成的操作 (构建,计算 等) |
BatchGet<plural noun> | :batchGet | GET | 批量获取多个资源 |
| Move | :move | POST | 将资源从父节点移动到另外一个父节点 |
| Search | :search | GET | 获取资源列表, 但不同于 List 语义 |
| Undelete | :undelete | POST | 恢复一个已删除的资源. 建议做 30 天的保留期 |
| Name | Type | Description |
|---|---|---|
| name | string | 包含相对资源名 |
| parent | string | 对资源定义和 List/Create 请求, 该字段表示相对的父节点资源名 |
| create_time | Timestamp | 创建时间 |
| update_time | Timestamp | 最后一次更新时间, 在 create/patch/delete 时更新 |
| delete_time | Timestamp | 删除时间, 如果支持资源保留 |
| expire_time | Timestamp | 超时时间 |
| start_time | Timestamp | 开始时间 |
| end_time | Timestamp | 结束时间 (不管是否成功) |
| time_zone | string | 时区名. IANA TZ name, 例如 "America/Los_Angeles", 时区列表 |
| region_code | string | 地区的 Unicode country/region code (CLDR), 例如 "US" and "419",unicode_region_subtag |
| language_code | string | BCP-47 语言码, 例如 "en-US". Unicode locale identifier |
| mime_type | string | IANA 发布的 MIME 类型. media-types |
| display_name | string | 实体的显示名字 |
| title | string | 实体的官方名字, 例如公司名. 作为正式的 display_name. |
| description | string | 实体描述 |
| filter | string | List 方法的标准过滤参数 |
| query | string | 等同于 List 方法的 filter, 不过用于 Search |
| page_token | string | List 请求的分页符 |
| page_size | int32 | List 请求的分页大小 |
| total_size | int32 | 总数 |
| next_page_token | string | 下一页的分页符, 如果为空则表示没有更多结果 |
| order_by | string | 指定 List 请求的排序 |
| request_id | string | 用于检测重复请求的唯一标识符 |
| resume_token | string | 用于恢复一个流请求的不透明标识符 |
| labels | map<string, string> | 资源标签 |
| deleted | bool | 如果资源允许 undelete 操作, 则应该有被删除标示 |
| show_deleted | bool | 如果资源允许 undelete 操作, 相应的 List 操作应该可以死指定显示已删除的资源 |
| update_mask | FieldMask | 用于 Update 对资源进行部分更新操作. 该属相对于资源而非请求消息 |
| validate_only | bool | 如果为 true, 则应该只验证该请求, 而不执行 |
package google.rpc;
message Status {
// 简单的错误码, 实际的错误码由 `google.rpc.Code` 定义
int32 code = 1;
// 面向开发者的错误信息. 应该解释错误原因并提可操作的解决办法
string message = 2;
// 附加的错误信息, 例如重试延迟或帮助链接
repeated google.protobuf.Any details = 3;
}
xxx.googleapis.comcalendar.googleapis.combuild.googleapis.com 和 buildresults.googleapis.com 同属于 Google Build API.proto 中定义的包名, 应该尽量与产品和服务名保持你一直google.watcher.v1com.net 等).proto 中的 service, 避免与服务名冲突Calendar BlobFileApi,Service)来避免歧义VerbNoun 动词名字 的格式, 其中的每次应该为资源类型Request 和 Response 作为后缀, 除非
UpperCamelCaseCAPITALIZED_NAMES_WITH_UNDERSCORES; 结束ENUM_TYPE_UNSPECIFIED, 表示该值未被指定lower_case_underscore_separated_namesreason_for_error -> error_reasoncpu_usage_at_time_of_failure -> failure_time_cpu_usageitems_collected -> collected_itemsobjects_imported -> imported_objectsgoogle.protobuf.Timestamp 和 google.protobuf.Duration_time 或 _duration 作为后缀xxx_{time|duration|delay|latency}_{seconds|millis|micros|nanos} 格式2014-07-30T10:43:17Zgoogle.type.Date 和 google.type.TimeOfDay_date 和 _time 作为后缀YYYY-MM-DD 例如 2014-07-30HH:MM:SS[.FFF] 例如 14:55:01.672xxx_{bytes|width_pixels|meters}_count 作为后缀filter| API Name | Example |
|---|---|
| 产品名 | Google Calendar API |
| 服务名 | calendar.googleapis.com |
| 包名 | google.calendar.v3 |
| 接口名 | google.calendar.v3.CalendarService |
| 源码目录 | //google/calendar/v3 |
| API 名 | calendar |
方法名
| Verb | Noun | Method name | Request message | Response message |
|---|---|---|---|---|
| List | Book | ListBooks | ListBooksRequest | ListBooksResponse |
| Get | Book | GetBook | GetBookRequest | Book |
| Create | Book | CreateBook | CreateBookRequest | Book |
| Update | Book | UpdateBook | UpdateBookRequest | Book |
| Rename | Book | RenameBook | RenameBookRequest | RenameBookResponse |
| Delete | Book | DeleteBook | DeleteBookRequest | google.protobuf.Empty |
MAJOR.MINOR.PATCH
| Version | Proto Package | Description |
|---|---|---|
| v1alpha | v1alpha1 | The v1 alpha release. |
| v1beta1 | v1beta1 | The v1 beta 1 release. |
| v1beta2 | v1beta2 | The second beta release of v1. |
| v1test | v1test | An internal test release with dummy data. |
| v1 | v1 | The v1 major version, general availability. |
| v1.1beta1 | v1p1beta1 | The first beta release for minor changes to v1. |
| v1.1 | v1 | The minor update to v1.1 release. |
| v2beta1 | v2beta1 | The v2 beta 1 release. |
| v2 | v2 | The v2 major version, general availability. |
1024*768 的显示器# 修改主机名
hostnamectl set-hostname myHostName
# 如果想要直接使用主机名,还需要在 /etc/hosts 里添加相关记录
# nano /etc/hostname
# nano /etc/hosts
# 生成中文
locale-gen zh_CN.UTF-8
# 基本更新
apt-get update
apt-get upgrade
# 出现 The following packages have been kept back 可考虑 apt dist-upgrade 或 install
# 当 /etc/apt/sources.list* 有其他仓库时使用 dist-upgrade 相对没那么安全
# 修改密码
passwd
# 创建用于部署的用户
useradd deploy
mkdir /home/deploy
mkdir /home/deploy/.ssh
chmod 700 /home/deploy/.ssh
# 将需要使用该用户的公钥添加进去
vim /home/deploy/.ssh/authorized_keys
chmod 400 /home/deploy/.ssh/authorized_keys
chown deploy:deploy /home/deploy -R
# 编辑 sudoers
visudo
# 将需要 sudo 的用户添加进去
# deploy ALL=(ALL) ALL
# 修改 sshd 权限
vim /etc/ssh/sshd_config
# PermitRootLogin no # 不允许直接 root 登陆
# PasswordAuthentication no # 不允许密码登陆
# AllowUsers deploy@(your-ip) deploy@(another-ip-if-any) # 只允许指定地址的人登陆
# service ssh restart
# 防火墙设置
# DNS 53
# mosh allow 60000:61000/udp 或 allow mosh
ufw allow 22
ufw allow 80
ufw allow 443
ufw default deny
ufw enable
当有多台主机需要部署的时候,建议使用 sshrc, tmuxrc, 这样能快速的将所有的配置都带给服务器,能够快速方便的对多台进行安装部署.
由于 mosh 部分鼠标相关的功能需要最新版,所以建议直接安装 dev 版本
apt-get install -y software-properties-common
add-apt-repository ppa:keithw/mosh-dev
apt-get update
apt install -y mosh
apt-get install fail2ban
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
# bantime = 3600 # ban 1 小时
# destemail = admin@admin # 发送警告的邮箱地址
# 将 ssh/ssh-ddos 等段落下的 enable 设置为 true 打开相应的 filter
apt-get install software-properties-common
# 添加 Oracle Java 仓库
add-apt-repository ppa:webupd8team/java#
apt-get update
# 安装 Oracle Java 8 JDK
apt-get install oracle-java8-installer
# 如果有多个 Java 环境可调整配置
update-alternatives --config java
# https://jiandanxinli.github.io/2016-08-06.html
# /etc/sysctl.conf
# net.ipv6.conf.all.disable_ipv6=0
# net.ipv6.conf.default.disable_ipv6=0
# net.ipv6.conf.lo.disable_ipv6=0
sysctl -p
# https://www.tunnelbroker.net/
# 选择 linux route2, 然后执行脚本
# 检测 ipv6 是否可用
# http://ready.chair6.net/?url=wener.me
# 如果操作失败了则删除通道从来
ip tun del he-ipv6
这几天尝试了很多的 *aaS, 期望能找到在当前架构下适合公司后续发展的一个系统架构, 然而一路下来发现并没那么简单.
Writing Redis Module in Golang.
Tap Titans on Play Store
NOTE
- Only tested on Nexus 5, different devices may use different coordinates and event dev.
- Used to plat tiantis long time ago, may not works in current version.Different version may use different color and coordinates
chmod +x play.sh
# Connect through lan, so you don't have to use the usb
./play.sh use-tcp
# Push the pre-generated event file
adb push events /mnt/sdcard
# Start playing
./play.sh
adb shell input tap, instead use a generated file that represent a tap event, then cat tap > /dev/input/event1.Use screen capture, then use the image magic to check the color,kind of slowly, but works.
Check the source
The first VM in my live.