{"id":1220,"date":"2023-03-18T09:07:40","date_gmt":"2023-03-18T01:07:40","guid":{"rendered":"https:\/\/www.appblog.cn\/?p=1220"},"modified":"2023-04-29T09:37:46","modified_gmt":"2023-04-29T01:37:46","slug":"design-of-app-update-server-based-on-atlas","status":"publish","type":"post","link":"https:\/\/www.appblog.cn\/index.php\/2023\/03\/18\/design-of-app-update-server-based-on-atlas\/","title":{"rendered":"\u57fa\u4e8eAtlas\u7684APP\u66f4\u65b0\u670d\u52a1\u5668\u8bbe\u8ba1"},"content":{"rendered":"<h2>\u8868\u7ed3\u6784\u8bbe\u8ba1<\/h2>\n<ul>\n<li>apps: APP<\/li>\n<li>app_versions: \u7248\u672c<\/li>\n<li>app_version_patchs: Update Patch<\/li>\n<li>app_version_dexpatchs: Dex Patch<\/li>\n<li>app_bundles: \u8fdc\u7a0bBundle<\/li>\n<\/ul>\n<p><!-- more --><\/p>\n<pre><code>alter table `app_versions` add constraint `version_app_id_fk` foreign key(`app_id`) references `apps`(`id`)\nalter table `app_versions` add constraint `version_tag_id_fk` foreign key(`tag_id`) references `app_tags`(`id`)\n\nalter table `app_version_patchs` add constraint `patch_app_id_fk` foreign key(`app_id`) references `apps`(`id`)\nalter table `app_version_patchs` add constraint `curr_version_id_fk` foreign key(`curr_version_id`) references `app_versions`(`id`)\nalter table `app_version_patchs` add constraint `last_version_id_fk` foreign key(`last_version_id`) references `app_versions`(`id`)\n\nalter table `app_version_dexpatchs` add constraint `dexpatch_app_id_fk` foreign key(`app_id`) references `apps`(`id`)\nalter table `app_version_dexpatchs` add constraint `base_version_id_fk` foreign key(`base_version_id`) references `app_versions`(`id`)\n\nalter table `app_bundles` add constraint `bundle_app_id_fk` foreign key(`app_id`) references `apps`(`id`)\nalter table `app_bundles` add constraint `min_version_id_fk` foreign key(`min_version_id`) references `app_versions`(`id`)\nalter table `app_bundles` add constraint `max_version_id_fk` foreign key(`max_version_id`) references `app_versions`(`id`)<\/code><\/pre>\n<h2>\u8bf7\u6c42\u5728\u7ebf\u66f4\u65b0\u5305<\/h2>\n<pre><code>URL\uff1ahttp:\/\/update.yezhou.cc\/api\/app_update\nMethod\uff1aPOST\nRequest\uff1a{&quot;application_id&quot;:&quot;cn.appblog.example&quot;,&quot;version_code&quot;:1,&quot;version_name&quot;:&quot;1.0.0&quot;}\nResponse\uff1a\n{\n    &quot;code&quot;: 0,\n    &quot;msg&quot;: &quot;Found a new patch to update&quot;,\n    &quot;data&quot;: {\n        &quot;id&quot;: 1,\n        &quot;file_name&quot;: &quot;1.0.1@1.0.0.tpatch&quot;,\n        &quot;file_url&quot;: &quot;http:\/\/update.yezhou.cc\/upload\/files\/AppExample\/1.0.1\/1.0.1@1.0.0.zip&quot;,\n        &quot;update_info_name&quot;: &quot;update-1.0.0.json&quot;,\n        &quot;update_info_url&quot;: &quot;http:\/\/update.yezhou.cc\/upload\/files\/AppExample\/1.0.1\/update-1.0.0.json&quot;,\n        &quot;update_desc&quot;: &quot;\u66f4\u65b0\u652f\u4ed8&quot;,\n        &quot;update_time&quot;: &quot;2018-09-19 10:00:00&quot;,\n        &quot;is_quiet&quot;: 1,\n        &quot;is_force&quot;: 1,\n        &quot;size&quot;: 2019,\n        &quot;md5&quot;: &quot;52875c03b704eb7b81013a588a2fd8bd&quot;,\n        &quot;sha1&quot;: &quot;3537b7154160345c747d921539124c1bfcfa9bcf&quot;,\n        &quot;update_type&quot;: &quot;patch&quot;,\n        &quot;version_code&quot;: 1,\n        &quot;version_name&quot;: &quot;1.0.1&quot;\n    }\n}<\/code><\/pre>\n<h2>\u8bf7\u6c42DexPatch\u5305<\/h2>\n<pre><code>URL\uff1ahttp:\/\/update.yezhou.cc\/api\/app_patch\nMethod\uff1aPOST\nRequest\uff1a{&quot;application_id&quot;:&quot;cn.appblog.example&quot;,&quot;version_code&quot;:1,&quot;version_name&quot;:&quot;1.0.0&quot;}\nResponse\uff1a\n{\n    &quot;code&quot;: 0,\n    &quot;msg&quot;: &quot;Found a dex patch&quot;,\n    &quot;data&quot;: {\n        &quot;id&quot;: 1,\n        &quot;file_name&quot;: &quot;1.0.0@1.0.0.tpatch&quot;,\n        &quot;file_url&quot;: &quot;http:\/\/update.yezhou.cc\/upload\/files\/AppExample\/1.0.1\/1.0.0@1.0.0-1.zip&quot;,\n        &quot;dexpatch_version&quot;: 1,\n        &quot;dexpatch_info_name&quot;: &quot;dexpatch-1.0.0.json&quot;,\n        &quot;dexpatch_info_url&quot;: &quot;http:\/\/update.yezhou.cc\/upload\/files\/AppExample\/1.0.1\/dexpatch-1.0.0-1.json&quot;,\n        &quot;dexpatch_desc&quot;: &quot;\u4fee\u6b63\u7a7a\u6307\u9488\u5f02\u5e38&quot;,\n        &quot;dexpatch_time&quot;: &quot;2018-09-20 10:00:00&quot;,\n        &quot;is_restart_app&quot;: 0,\n        &quot;size&quot;: 2019,\n        &quot;md5&quot;: &quot;52875c03b704eb7b81013a588a2fd8bd&quot;,\n        &quot;sha1&quot;: &quot;3537b7154160345c747d921539124c1bfcfa9bcf&quot;,\n        &quot;update_type&quot;: &quot;dex_patch&quot;,\n        &quot;version_code&quot;: 1,\n        &quot;version_name&quot;: &quot;1.0.1&quot;\n    }\n}<\/code><\/pre>\n<h2>\u8bf7\u6c42\u8fdc\u7a0b\u63d2\u4ef6\u5305<\/h2>\n<pre><code>URL\uff1ahttp:\/\/update.yezhou.cc\/api\/app_bundle\nMethod\uff1aPOST\nRequest\uff1a{&quot;application_id&quot;:&quot;cn.appblog.example&quot;,&quot;version_code&quot;:1,&quot;version_name&quot;:&quot;1.0.1&quot;,&quot;bundle_name&quot;:&quot;qrcode&quot;,&quot;bundle_group&quot;:&quot;me.yezhou.lib.qrcode&quot;}\nResponse\uff1a\n{\n    &quot;code&quot;: 0,\n    &quot;msg&quot;: &quot;Found a latest matched bundle&quot;,\n    &quot;data&quot;: {\n        &quot;bundle_name&quot;: &quot;qrcode&quot;,\n        &quot;bundle_group&quot;: &quot;me.yezhou.lib.qrcode&quot;,\n        &quot;bundle_version&quot;: &quot;1.0.0&quot;,\n        &quot;bundle_desc&quot;: &quot;\u4e8c\u7ef4\u7801\u626b\u63cf\u63d2\u4ef6&quot;,\n        &quot;bundle_time&quot;: &quot;2018-09-19 12:00:00&quot;,\n        &quot;file_name&quot;: &quot;libme_yezhou_lib_qrcode.so&quot;,\n        &quot;file_url&quot;: &quot;http:\/\/update.yezhou.cc\/files\/AppExample\/qrcode\/libme_yezhou_lib_qrcode-1.0.0.zip&quot;,\n        &quot;size&quot;: 340153,\n        &quot;md5&quot;: &quot;a17d6ca9717531b8d9c8c4584c461239&quot;,\n        &quot;sha1&quot;: &quot;63a65d402de76ca7ec01c4b23c616e58fb4ca607&quot;\n    }\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>\u8868\u7ed3\u6784\u8bbe\u8ba1 apps: APP app_versions: \u7248\u672c app_version_patchs: Up [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[275],"tags":[],"class_list":["post-1220","post","type-post","status-publish","format-standard","hentry","category-atlas"],"_links":{"self":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1220","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/comments?post=1220"}],"version-history":[{"count":0,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/posts\/1220\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/media?parent=1220"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/categories?post=1220"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.appblog.cn\/index.php\/wp-json\/wp\/v2\/tags?post=1220"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}