



  

<!DOCTYPE html>
<html
  lang="en"
  
  data-color-mode="auto" data-light-theme="light" data-dark-theme="dark"
  data-a11y-animated-images="system" data-a11y-link-underlines="true"
  
  >




  <head>
    <meta charset="utf-8">
  <link rel="dns-prefetch" href="https://github.githubassets.com">
  <link rel="dns-prefetch" href="https://avatars.githubusercontent.com">
  <link rel="dns-prefetch" href="https://github-cloud.s3.amazonaws.com">
  <link rel="dns-prefetch" href="https://user-images.githubusercontent.com/">
  <link rel="preconnect" href="https://github.githubassets.com" crossorigin>
  <link rel="preconnect" href="https://avatars.githubusercontent.com">

<script type="importmap">{"imports":{"react":"https://github.githubassets.com/assets/react-e27d1b3e03961e68.js","react-dom":"https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js","react-dom/client":"https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js","react-is":"https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js","react-reconciler":"https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js","react/compiler-runtime":"https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js","react/jsx-dev-runtime":"https://github.githubassets.com/assets/react-jsx-dev-runtime-ea55d68667d559e5.js","react/jsx-runtime":"https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js","scheduler":"https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js"}}</script>
<meta name="react-profiling" content="0" data-turbo-transient="true" />
<meta name="react-import-map" content="react,react-dom,react-dom/client,react-dom/profiling,react-is,react-reconciler,react/compiler-runtime,react/jsx-dev-runtime,react/jsx-runtime,scheduler@777f63f87cd0" data-turbo-track="reload" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-e27d1b3e03961e68.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-compiler-runtime-4610bd6d3de9c049.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/scheduler-58b860b049ca307c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-e5fd46a22d5c4058.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-dom-client-1b4a3ee065998cea.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-is-e0b593954b4706d8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-jsx-runtime-4915cb0f5b3aff04.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-reconciler-8e99e505c4429605.js" />

  


  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="light" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light-99f877e9ddfc0e51.css" /><link data-color-theme="light_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_high_contrast-48fdd0811afbab3c.css" /><link data-color-theme="light_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind-f4bf1142976e4bbf.css" /><link data-color-theme="light_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_colorblind_high_contrast-f661b49995ba0bd8.css" /><link data-color-theme="light_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia-0b38d22346321c92.css" /><link data-color-theme="light_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/light_tritanopia_high_contrast-f1c62c9e70259b9f.css" /><link data-color-theme="dark" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark-79ad2ace604703b3.css" /><link data-color-theme="dark_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_high_contrast-24484a076f02295f.css" /><link data-color-theme="dark_colorblind" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind-f50cacf0a86b9929.css" /><link data-color-theme="dark_colorblind_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_colorblind_high_contrast-e61d4f4ca17852c2.css" /><link data-color-theme="dark_tritanopia" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia-39c10993d5603fac.css" /><link data-color-theme="dark_tritanopia_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_tritanopia_high_contrast-73236c840c0c7d90.css" /><link data-color-theme="dark_dimmed" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed-0de76f07cc035b10.css" /><link data-color-theme="dark_dimmed_high_contrast" crossorigin="anonymous" media="all" rel="stylesheet" data-href="https://github.githubassets.com/assets/dark_dimmed_high_contrast-fd1500c8744e40d6.css" />

  <style type="text/css">
    :root {
      --tab-size-preference: 4;
    }

    pre, code {
      tab-size: var(--tab-size-preference);
    }
  </style>

    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-primitives-ed9ca172356fd545.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-1d2c7f7b52a6068b.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/global-54ba76e934a49d7c.css" />
    <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/github-456bd5deb85c7ecd.css" />
  <link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/repository-11ee8a031c040c1a.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-2d56bdb0166c0238.css" />

  

  <script type="application/json" id="client-env">{"locale":"en","featureFlags":["actions_enable_background_steps","actions_new_hosted_runner_image_select_sizes_and_versions","activity_diff_file_tree","activity_repos_file_tree","activity_repos_overview_header","activity_repos_overview_sidebar","agent_author_search_expansion","agent_author_search_expansion_ui_pulls","alternate_user_config_repo","async_conversion_coverage_enabled","billing_billable_licenses_cost_center_bucket_fix","billing_budget_expiration","billing_cost_center_list_assigned_resources","billing_discount_threshold_notification","code_quality_enablement_banner_targeting","code_quality_remove_preview","code_view_raf_sticky_lines","codespaces_prebuild_region_target_update","coding_agent_third_party_model_ui","copilot_agent_snippy","copilot_api_agentic_issue_marshal_yaml","copilot_automation_repo_mcp_servers","copilot_automations_pagination","copilot_chat_auto_mode_v2","copilot_chat_clear_model_selection_for_default_change","copilot_chat_header_reorder","copilot_chat_max_upsell","copilot_chat_models_browser_cache","copilot_chat_vision_dotcom_chat_ga_gate","copilot_css_textarea_autosize","copilot_custom_copilots","copilot_custom_copilots_feature_preview","copilot_duplicate_thread","copilot_extensions_removal_on_marketplace","copilot_fix_failed_workflows_all_skus","copilot_hide_hovercard","copilot_immersive_embedded_header_button","copilot_immersive_file_preview_keep_mounted","copilot_immersive_task_hyperlinking","copilot_mc_cli_resume_any_users_task","copilot_mission_control_agent_merge_fix_ci","copilot_mission_control_agent_merge_resolve_conflicts","copilot_mission_control_early_stop","copilot_mission_control_environment_list_icons","copilot_mission_control_managed_sandbox_environments","copilot_mission_control_needs_attention","copilot_mission_control_reasoning_effort","copilot_mission_control_sandbox_client_side_clone","copilot_mission_control_sandbox_remote_bypass","copilot_mission_control_session_filters","copilot_mission_control_task_alive_updates","copilot_mission_control_task_sharing","copilot_org_policy_page_focus_mode","copilot_share_active_subthread","copilot_spaces_ga","copilot_spaces_individual_policies_ga","copilot_spark_handle_nil_friendly_name","copilot_swe_agent_authorization_status_ui","copilot_swe_agent_automation_resource_scoped_writes","copilot_swe_agent_hide_model_picker_if_only_auto","copilot_swe_agent_issue_comment_trigger","copilot_swe_agent_pr_comment_model_picker","copilot_swe_agent_pull_request_comment_trigger","copilot_swe_agent_pull_request_merged_trigger","copilot_swe_agent_pull_request_opened_trigger","copilot_swe_agent_pull_request_synchronize_trigger","copilot_swe_agent_use_subagents","copilot_task_api_github_rest_style","copilot_task_scoped_alive_channel","copilot_token_based_billing","copilot_unconfigured_is_inherited","copilot_user_can_upgrade_plan_field","copilot_workbench_sunset","copilot_workbench_sunset_redirect","copilot_workbench_ubb","dashboard_indexeddb_caching","dashboard_lists_max_age_filter","dashboard_universe_2025_feedback_dialog","glc_code_quality_repo_settings_workflow_config","hide_github_models_ui","hyperspace_2025_logged_out_batch_1","hyperspace_2025_logged_out_batch_2","hyperspace_2025_logged_out_batch_3","in_product_messaging_datadog_monitoring","ipm_global_transactional_message_copilot","ipm_global_transactional_message_issues","ipm_global_transactional_message_prs","ipm_global_transactional_message_repos","ipm_global_transactional_message_spaces","ipm_ubb_individual_budget_banner","issue_fields_multi_select","issue_inline_avatars","issue_pinned_views","issue_pinned_views_optimistic_updates","issue_relative_time_micro","issues_dashboard_sso_structured_errors","issues_expanded_file_types","issues_hide_closed_sub_issues","issues_lazy_load_comment_box_suggestions","issues_optimistic_linked_branch_create","issues_react_chrome_container_query_fix","labels_archiving","labels_archiving_info","landing_pages_ninetailed","lifecycle_label_name_updates","marketing_cookie_consent_banner","marketing_pages_search_explore_provider","memex_client_env_github_domain","memex_default_issue_create_repository","memex_lazy_hydrate_agent_tasks","memex_live_update_hovercard","memex_mwl_filter_field_delimiter","memex_remove_deprecated_type_issue","merge_queue_restricted_pushers_warning","merge_status_checks_refetch_dedupe","merge_status_header_feedback","oauth_authorize_clickjacking_protection","octocaptcha_origin_optimization","primer_react_css_anchor_positioning","primer_react_merged_forwarded_refs","prs_copilot_app_open_action","prs_css_anchor_positioning","pull_request_commit_checks_dialog","pull_request_copilot_attribution_header","pull_request_overview_panel_edit_description","pull_request_persister","pull_request_stacks_feedback_dialog","pull_request_virtualization_image_estimate","pull_request_virtualization_scroll_compensation","pull_request_virtualization_scroll_intent","quick_search_lazy_suggestions","react_blob_isolate_code_lines","react_blob_ssr_content_visibility","react_data_router_tanstack_allowed","react_query_props_with_key","react_sandbox_future_tanstack","repo_app_turbo","repo_issues_sidebar_layout","repo_pulls_dashboard_persistence","repo_pulls_dashboard_sidebar_links","repos_contributors_limited_default_range","review_involves_filter","rule_ignored_file_paths","rulesets_actor_list_editor","sample_network_conn_type","security_center_artifact_filters_popover","see_who_reacted","semantic_similarity_duplicate_issue_detection","session_logs_ungroup_reasoning_text","set_sha256_on_repo_creation_form","site_banner_desktop_copilot_app","site_ghca_pixel_mona","site_github_app_ga_page","site_github_app_ga_page_highlight","site_github_app_mobile_native_share","site_global_banner_dev_days_attendee","site_global_banner_learn_copilot_sdk","site_global_nav_spark_models_removed","spark_prompt_secret_scanning","spark_server_connection_status","suggest_custom_property_values_copilot","suppress_automated_browser_vitals","swp_forms_disable_octocaptcha","thread_resolution_reason","ui_service_compute_proxy_control","ui_service_referrer_metrics","ui_service_staleness_detection","update_issue_suggestions","user_code_paste_ux","viewscreen_sandbox","warn_inaccessible_attachments","webp_support","workbench_store_readonly","workstream_plugin_bootstrap"],"githubDomain":"https://github.com","copilotApiOverrideUrl":"https://api.githubcopilot.com","cmcApiUrl":"https://api.github.com/cmc_internal/api"}</script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/high-contrast-cookie-e3d808ee18eb9784.js"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-runtime-d0e712808f201ef1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-foundation-74e9766bd696d26a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/app-runtime-ecf766ea8a2c7fd6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fetch-utilities-8e3d9c5d57d50312.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ser-cd1b421ad0ad7ed5.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/environment-61cbdbc14ca92159.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/app-runtime.b6099d51b9e67b57.module.css" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/catalyst-86a8f5de995615f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/selector-observer-e88088f989b27670.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/relative-time-element-7cdf4e0db98b997c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/by-6b3c07383371bf58.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ja9-36f036c13c2e3a4c.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kw-866fd9513ae95106.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/r1-b075aab3204f32f9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/jz5-7c5d1669717041f8.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hj-5126390ff433704d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j05-dce4d588268f0f7e.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/github-elements-1adb1d8c74044da9.js" defer="defer"></script>
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/element-registry-1a7659d5cb4f8269.js" defer="defer"></script>
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/runtime-helpers-f3f5d71440009c48.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/aria-live-76b18916d0c8ec4d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hotkey-5109c77d7ac61078.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/react-core-fbb00aaa3ab9abdf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/04n-51c49ba758739f13.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ur-024971cb63acad59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4t-364e19c63d726e9a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/6ny-c969fbae697a356f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/yhq-3a209035a30b1a09.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z1v-da5b33b877bfa358.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wo-09f85d22a6c8931b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/9y-81cfe57dc9040f3e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j0-41a4cf04cbd99503.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0p-81491ed0d9d666e2.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/behaviors-acc18f300bdd5b9f.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/react-core.5858534b1c27f133.module.css" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-menu-f832f583b1c927a9.js" defer="defer"></script>
  
  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/primer-react-12ebdc24dcff1ecc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ncx-9a860680a5f230b9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j6-363f0ebf4f62f310.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/t7l-bf6f21d7e7a43c35.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fe-7576d9b281e2106a.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wsr-5fd3071e5a9061ab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0n-ecadb2ffe6b01ba2.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xv-51cb34754bda73a9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/n4u-6317ce1c31aed1db.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/j8s-d90ce3a169b741ed.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/la-de176c4ee471f2b3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/eag-d9eea130fa716df9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/y2-87df441f1bc5a264.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/kcz-607e36c8a3751cf0.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/x4-65dba777efd828f3.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/gzu-1a09248f686325f6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bi0-e2f78de823e39ca9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/on-95be29ba1ef725d9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b1-1dbc371cef78c3c1.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0l5-c4edb8ab48c5846d.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/c2z-c92998400310b94b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/f9-038758dcbfe08dab.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/0k-b7df0a74912a42bf.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/sp-915c6643cc0d7d44.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/og-93ae8b358505d372.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/b9-69d9b60a1b1fcd59.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ec-8ea7978d3fcd114e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/du-a401e69a37d95bcc.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ql0-1c18210f6b9e2263.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/20-0a2e46387735f1f4.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/dsj-cb1e4ddbce4f007b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/wp-9f5235d335ab624b.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/ko6-9e80f7ac359e3c43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/uw-8c275f7ac25b7cf6.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/bsb-4f4ac8c20da73fac.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/w5-13e3a7548bb20af9.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fm-c00a7677663ba326.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/z-45022d3da7b8817e.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/h0-010921512138e12f.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/5p-ae5db0820116fb43.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/8vq-b2af216e992e11ef.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/g5-88f2a4514daa19ca.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/xc-f5d51b571cd317cb.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/arw-51e8918a1b75a80f.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/code-view-c72427a42c7b1dd6.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/ql0.de7a55ca73db5693.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/z.812a998e1961b84d.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/xc.13e027137438fd9f.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/code-view.5099f1f900111d1b.module.css" />

  <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/hu-1fc0b2a167afc025.js" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fb-ef2c91536abed646.js" />
<script crossorigin="anonymous" type="module" src="https://github.githubassets.com/assets/notifications-subscriptions-menu-6f8f2a4b24a472b0.js" defer="defer"></script>
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/notifications-subscriptions-menu.3ae223c973c2cef3.module.css" />


  <title>APIJSON/详细的说明文档.md at master · JunDaTang/APIJSON · GitHub</title>



  <meta name="route-pattern" content="/:user_id/:repository/blob/*name(/*path)" data-turbo-transient>
  <meta name="route-controller" content="blob" data-turbo-transient>
  <meta name="route-action" content="show" data-turbo-transient>
  <meta name="fetch-nonce" content="v2:d5a5e3b8-0527-4583-c5c8-f0fe15f91aac">

    
  <meta name="current-catalog-service-hash" content="f3abb0cc802f3d7b95fc8762b94bdcb13bf39634c40c357301c4aa1d67a256fb">


  <meta name="request-id" content="AF38:CBF4F:120A1A26:10E8122B:6AACB1A3" data-pjax-transient="true"/><meta name="html-safe-nonce" content="81a46184bd42389b813fef2fe3a074c7a2683b2b873d016aa37e4171947a2ad4" data-pjax-transient="true"/><meta name="visitor-payload" content="eyJyZWZlcnJlciI6IiIsInJlcXVlc3RfaWQiOiJBRjM4OkNCRjRGOjEyMEExQTI2OjEwRTgxMjJCOjZBQUNCMUEzIiwidmlzaXRvcl9pZCI6IjY4ODIzOTE5NDQ5MzE4ODEzNzkiLCJyZWdpb25fZWRnZSI6ImZyYSIsInJlZ2lvbl9yZW5kZXIiOiJmcmEifQ==" data-pjax-transient="true"/><meta name="visitor-hmac" content="365a80ee0a83fdf9cf925c4a783e85020aa2dc084c41d9e2f9646db1f91113ad" data-pjax-transient="true"/>


    <meta name="hovercard-subject-tag" content="repository:641347055" data-turbo-transient>


  <meta name="github-keyboard-shortcuts" content="repository,source-code,file-tree,copilot" data-turbo-transient="true" />
  

  <meta name="selected-link" value="repo_source" data-turbo-transient>
  <link rel="assets" href="https://github.githubassets.com/">

    <meta name="google-site-verification" content="Apib7-x98H0j5cPqHWwSMm6dNU4GmODRoqxLiDzdx9I">

<meta name="octolytics-url" content="https://collector.github.com/github/collect" />





  <meta name="analytics-location" content="/&lt;user-name&gt;/&lt;repo-name&gt;/blob/show" data-turbo-transient="true" />

  




    <meta name="user-login" content="">

  

    <meta name="viewport" content="width=device-width">

    

      <meta name="description" content="🏆 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码，前端(客户端) 定制返回 JSON 的数据和结构。 🏆 A JSON Transmission Protocol and an ORM Library 🚀  provides APIs and Docs without writing any code. - APIJSON/详细的说明文档.md at master · JunDaTang/APIJSON">

      <link rel="search" type="application/opensearchdescription+xml" href="/opensearch.xml" title="GitHub">

    <link rel="fluid-icon" href="https://github.com/fluidicon.png" title="GitHub">
    <meta property="fb:app_id" content="1401488693436528">
    <meta name="apple-itunes-app" content="app-id=1477376905, app-argument=https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md" />

      <meta name="twitter:image" content="https://opengraph.githubassets.com/5daacbc997c08dabc5d4c91d73872f11cefb48fdf751d0a9053f45f743f6b11d/JunDaTang/APIJSON" /><meta name="twitter:site" content="@github" /><meta name="twitter:card" content="summary_large_image" /><meta name="twitter:title" content="APIJSON/详细的说明文档.md at master · JunDaTang/APIJSON" /><meta name="twitter:description" content="🏆 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码，前端(客户端) 定制返回 JSON 的数据和结构。 🏆 A JSON Transmission Protocol and an ORM Library 🚀  provides APIs and Docs without writing any code. - JunDaTang/APIJSON" />
  <meta property="og:image" content="https://opengraph.githubassets.com/5daacbc997c08dabc5d4c91d73872f11cefb48fdf751d0a9053f45f743f6b11d/JunDaTang/APIJSON" /><meta property="og:image:alt" content="🏆 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码，前端(客户端) 定制返回 JSON 的数据和结构。 🏆 A JSON Transmission Protocol and an ORM Library 🚀  provides APIs and Docs without writing any code. - JunDaTang/APIJSON" /><meta property="og:image:width" content="1200" /><meta property="og:image:height" content="600" /><meta property="og:site_name" content="GitHub" /><meta property="og:type" content="object" /><meta property="og:title" content="APIJSON/详细的说明文档.md at master · JunDaTang/APIJSON" /><meta property="og:url" content="https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md" /><meta property="og:description" content="🏆 零代码、全功能、强安全 ORM 库 🚀 后端接口和文档零代码，前端(客户端) 定制返回 JSON 的数据和结构。 🏆 A JSON Transmission Protocol and an ORM Library 🚀  provides APIs and Docs without writing any code. - JunDaTang/APIJSON" />
  




      <meta name="hostname" content="github.com">



        <meta name="expected-hostname" content="github.com">


  <meta http-equiv="x-pjax-version" content="1b7a4ff13706175db9ddcddd8b7c27b8946d9e20d9cdccd9cb54b37d67bc242f" data-turbo-track="reload">
  <meta http-equiv="x-pjax-csp-version" content="0c5c6e5334a905d8f9521e09eadcffba484d422e0d262e07ff922e6bc18b2ac6" data-turbo-track="reload">
  <meta http-equiv="x-pjax-css-version" content="ec4c7b86d7b57240253150b827ea48b04e08d8760dc6553d2a04f62000f3fe0c" data-turbo-track="reload">
  <meta http-equiv="x-pjax-js-version" content="4644d0c4c253864cb5744c15cc28e64149f3c1e0e485c44cbd24a4b86ca508ad" data-turbo-track="reload">

  <meta name="turbo-cache-control" content="no-preview" data-turbo-transient="">

      <meta name="turbo-cache-control" content="no-cache" data-turbo-transient>

    <meta data-hydrostats="publish">

  <meta name="go-import" content="github.com/JunDaTang/APIJSON git https://github.com/JunDaTang/APIJSON.git">

  <meta name="octolytics-dimension-user_id" content="15319232" /><meta name="octolytics-dimension-user_login" content="JunDaTang" /><meta name="octolytics-dimension-repository_id" content="641347055" /><meta name="octolytics-dimension-repository_nwo" content="JunDaTang/APIJSON" /><meta name="octolytics-dimension-repository_public" content="true" /><meta name="octolytics-dimension-repository_is_fork" content="true" /><meta name="octolytics-dimension-repository_parent_id" content="74359442" /><meta name="octolytics-dimension-repository_parent_nwo" content="APIJSON/APIJSON" /><meta name="octolytics-dimension-repository_network_root_id" content="74359442" /><meta name="octolytics-dimension-repository_network_root_nwo" content="APIJSON/APIJSON" />
  



    

    <meta name="turbo-body-classes" content="logged-out env-production page-responsive">
  <meta name="disable-turbo" content="false">


  <meta name="browser-stats-url" content="https://api.github.com/_private/browser/stats">


  <meta name="browser-errors-url" content="https://api.github.com/_private/browser/errors">

  <meta name="release" content="4a04228f6072ee1ec5cd2227074bd1c1a8308ce2" data-turbo-track="reload">
  <meta name="ui-target" content="full">

  <link rel="mask-icon" href="https://github.githubassets.com/assets/pinned-octocat-093da3e6fa40.svg" color="#000000">
  <link rel="alternate icon" class="js-site-favicon" type="image/png" href="https://github.githubassets.com/favicons/favicon.png">
  <link rel="icon" class="js-site-favicon" type="image/svg+xml" href="https://github.githubassets.com/favicons/favicon.svg" data-base-href="https://github.githubassets.com/favicons/favicon">

<meta name="theme-color" content="#1e2327">
<meta name="color-scheme" content="light dark" />


  <link rel="manifest" href="/manifest.json" crossOrigin="use-credentials">

  </head>

  <body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
    <div data-turbo-body class="logged-out env-production page-responsive" style="word-wrap: break-word;" >
      <div id="__primerPortalRoot__" style="z-index: 1000; position: absolute; width: 100%;" data-turbo-permanent></div>
      

    <div class="position-relative header-wrapper js-header-wrapper ">
      <a href="#start-of-content" data-skip-target-assigned="false" class="px-2 tmp-py-4 color-bg-accent-emphasis color-fg-on-emphasis show-on-focus js-skip-to-content">Skip to content</a>

      <span data-view-component="true" class="progress-pjax-loader Progress position-fixed width-full">
    <span style="width: 0%;" data-view-component="true" class="Progress-item progress-pjax-loader-bar left-0 top-0 color-bg-accent-emphasis"></span>
</span>      
      <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/l7j-2ddd8b435dadae28.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog-98a85b4ad3bf8229.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/keyboard-shortcuts-dialog.9f1b311c6a3e620b.module.css" />

<react-partial
  partial-name="keyboard-shortcuts-dialog"
  data-ssr="false"
  data-attempted-ssr="false"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"docsUrl":"https://docs.github.com/get-started/accessibility/keyboard-shortcuts"}}</script>
  <div data-target="react-partial.reactRoot"></div>
</react-partial>





      

          
          

                <link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/2l-8671acba87bc0dcb.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/i26-f2ae65b837c90ae7.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/fz5-23f28c0f388769c9.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/lht-26506ea833dda5be.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/p1-76a75a6081059b19.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/3d-82c347d20a13fb90.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/tua-c4ca62c5e0e0318e.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/4s-c22d880230690e1f.js" fetchpriority="low" />
<link crossorigin="anonymous" rel="modulepreload" href="https://github.githubassets.com/assets/marketing-header-5251d405164cfa54.js" fetchpriority="low" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-css.9d59d1018a52a53c.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/primer-react-brand-css.6a01c236ff527e7e.module.css" />
<link crossorigin="anonymous" media="all" rel="stylesheet" href="https://github.githubassets.com/assets/4s.e3d02f110161be52.module.css" />

<react-partial
  partial-name="marketing-header"
  data-ssr="true"
  data-attempted-ssr="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-partial.embeddedData">{"props":{"color_mode":"dark","logged_in":false,"marketing_page":false,"home_path":"/","login_path":"/login?return_to=https%3A%2F%2Fgithub.com%2FJunDaTang%2FAPIJSON%2Fblob%2Fmaster%2F%25E8%25AF%25A6%25E7%25BB%2586%25E7%259A%2584%25E8%25AF%25B4%25E6%2598%258E%25E6%2596%2587%25E6%25A1%25A3.md","signup_path":"/signup?ref_cta=Sign+up\u0026ref_loc=header+logged+out\u0026ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow\u0026source=header-repo\u0026source_repo=JunDaTang%2FAPIJSON","signup_enabled":true,"is_signup_controller":false,"show_search_and_nav":true,"hide_search":false,"private_mode_enabled":false,"should_use_dotcom_links":true,"auth_hydro_click":"{\"event_type\":\"authentication.click\",\"payload\":{\"location_in_page\":\"site header menu\",\"repository_id\":null,\"auth_type\":\"SIGN_UP\",\"originating_url\":\"https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md\",\"user_id\":null}}","auth_hydro_click_hmac":"437136313a16462408e1012a9fa6b2bdf101a6ae00ad82cd540848b8ead4fa4b","overlay":false,"fixed":false}}</script>
  <div data-target="react-partial.reactRoot"><div data-color-mode="dark" data-light-theme="light" data-dark-theme="dark"><header class="MarketingHeader-module__root__Tk7n3 HeaderMktg header-logged-out" role="banner" data-marketing-header="true" data-color-mode="dark" data-light-theme="light" data-dark-theme="dark" data-is-top="true"><h2 class="MarketingHeader-module__visuallyHidden__sqKsl">Navigation Menu</h2><button type="button" class="MarketingHeader-module__backdrop__sw4RU" aria-label="Close navigation menu"></button><div class="MarketingHeader-module__bar__mBSyE"><div class="MarketingHeader-module__topRow__yeury"><div class="MarketingHeader-module__toggleSlot__hDxbh"><button type="button" class="HeaderMenuToggle-module__toggle__i8EiC" aria-label="Toggle navigation" aria-expanded="false"><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span><span class="HeaderMenuToggle-module__toggleBar__jVN0H"></span></button></div><a href="/" aria-label="Homepage" class="HeaderLogo-module__logo__UFyHI" data-analytics-event="{&quot;action&quot;:&quot;homepage&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;logo&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;homepage_link_logo_header&quot;}"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github" viewBox="0 0 24 24" width="32" height="32" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path></svg></a><div class="AuthCTAs-module__mobileActions__NNzeV"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/login?return_to=https%3A%2F%2Fgithub.com%2FJunDaTang%2FAPIJSON%2Fblob%2Fmaster%2F%25E8%25AF%25A6%25E7%25BB%2586%25E7%259A%2584%25E8%25AF%25B4%25E6%2598%258E%25E6%2596%2587%25E6%25A1%25A3.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="437136313a16462408e1012a9fa6b2bdf101a6ae00ad82cd540848b8ead4fa4b"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_3dd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_3dd_">Appearance settings</div></div></div><div class="MarketingHeader-module__menu__GIy3y"><div class="MarketingHeader-module__menuWrapper__owstH"><nav class="MarketingNavigation-module__nav__W0KYY" aria-label="Global"><ul class="MarketingNavigation-module__list__tFbMb"><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_nd_">Platform<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5knd_">AI CODE CREATION</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot" data-analytics-event="{&quot;action&quot;:&quot;github_copilot&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>GitHub Copilot</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Write better code with AI</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/ai/github-app" data-analytics-event="{&quot;action&quot;:&quot;github_copilot_app&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_copilot_app_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mark-github NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.766 11.328c-2.063-.25-3.516-1.734-3.516-3.656 0-.781.281-1.625.75-2.188-.203-.515-.172-1.609.063-2.062.625-.078 1.468.25 1.968.703.594-.187 1.219-.281 1.985-.281.765 0 1.39.094 1.953.265.484-.437 1.344-.765 1.969-.687.218.422.25 1.515.046 2.047.5.593.766 1.39.766 2.203 0 1.922-1.453 3.375-3.547 3.64.531.344.89 1.094.89 1.954v1.625c0 .468.391.734.86.547C13.781 14.359 16 11.53 16 8.03 16 3.61 12.406 0 7.984 0 3.563 0 0 3.61 0 8.031a7.88 7.88 0 0 0 5.172 7.422c.422.156.828-.125.828-.547v-1.25c-.219.094-.5.156-.75.156-1.031 0-1.64-.562-2.078-1.609-.172-.422-.36-.672-.719-.719-.187-.015-.25-.093-.25-.187 0-.188.313-.328.625-.328.453 0 .844.281 1.25.86.313.452.64.655 1.031.655s.641-.14 1-.5c.266-.265.47-.5.657-.656"></path></svg>GitHub Copilot app</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Direct agents from issue to merge</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/mcp" data-analytics-event="{&quot;action&quot;:&quot;mcp_registry&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;mcp_registry_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-mcp NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.52 1.12a3.578 3.578 0 0 1 6.078 2.98 3.578 3.578 0 0 1 2.982 6.08l-3.292 3.293a.252.252 0 0 0 0 .354l.843.843a.749.749 0 1 1-1.06 1.06l-.844-.843a1.75 1.75 0 0 1 0-2.474L13.52 9.12a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0L7.731 9.03A.75.75 0 0 1 6.67 7.97l2.85-2.85a2.08 2.08 0 0 0 0-2.94 2.08 2.08 0 0 0-2.94 0l-4.799 4.8A.75.75 0 0 1 .72 5.92Z"></path><path d="M7.52 3.12a.749.749 0 1 1 1.06 1.06L5.731 7.03A2.079 2.079 0 0 0 8.67 9.97l2.85-2.85a.749.749 0 1 1 1.06 1.06l-2.849 2.85A3.578 3.578 0 0 1 4.67 5.97Z"></path></svg>MCP Registry</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Integrate external tools</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9knd_">DEVELOPER WORKFLOWS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9knd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/actions" data-analytics-event="{&quot;action&quot;:&quot;actions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;actions_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-workflow NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h3.5C6.216 0 7 .784 7 1.75v3.5A1.75 1.75 0 0 1 5.25 7H4v4a1 1 0 0 0 1 1h4v-1.25C9 9.784 9.784 9 10.75 9h3.5c.966 0 1.75.784 1.75 1.75v3.5A1.75 1.75 0 0 1 14.25 16h-3.5A1.75 1.75 0 0 1 9 14.25v-.75H5A2.5 2.5 0 0 1 2.5 11V7h-.75A1.75 1.75 0 0 1 0 5.25Zm1.75-.25a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Zm9 9a.25.25 0 0 0-.25.25v3.5c0 .138.112.25.25.25h3.5a.25.25 0 0 0 .25-.25v-3.5a.25.25 0 0 0-.25-.25Z"></path></svg>Actions</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Automate any workflow</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/codespaces" data-analytics-event="{&quot;action&quot;:&quot;codespaces&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;codespaces_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codespaces NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 11.25c0-.966.784-1.75 1.75-1.75h12.5c.966 0 1.75.784 1.75 1.75v3A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm2-9.5C2 .784 2.784 0 3.75 0h8.5C13.216 0 14 .784 14 1.75v5a1.75 1.75 0 0 1-1.75 1.75h-8.5A1.75 1.75 0 0 1 2 6.75Zm1.75-.25a.25.25 0 0 0-.25.25v5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5a.25.25 0 0 0-.25-.25Zm-2 9.5a.25.25 0 0 0-.25.25v3c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25v-3a.25.25 0 0 0-.25-.25Z"></path><path d="M7 12.75a.75.75 0 0 1 .75-.75h4.5a.75.75 0 0 1 0 1.5h-4.5a.75.75 0 0 1-.75-.75Zm-4 0a.75.75 0 0 1 .75-.75h.5a.75.75 0 0 1 0 1.5h-.5a.75.75 0 0 1-.75-.75Z"></path></svg>Codespaces</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Instant dev environments</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/issues" data-analytics-event="{&quot;action&quot;:&quot;issues&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;issues_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-issue-opened NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9.5a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path><path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Z"></path></svg>Issues</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Plan and track work</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-review" data-analytics-event="{&quot;action&quot;:&quot;code_review&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_review_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path></svg>Code Review</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Manage code changes</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/code-quality" data-analytics-event="{&quot;action&quot;:&quot;code_quality&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_quality_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-codescan-checkmark NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.28 6.28a.75.75 0 1 0-1.06-1.06L6.25 8.19l-.97-.97a.75.75 0 0 0-1.06 1.06l1.5 1.5a.75.75 0 0 0 1.06 0l3.5-3.5Z"></path><path d="M7.5 15a7.5 7.5 0 1 1 5.807-2.754l2.473 2.474a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2.474-2.473A7.472 7.472 0 0 1 7.5 15Zm0-13.5a6 6 0 1 0 4.094 10.386.748.748 0 0 1 .293-.292 6.002 6.002 0 0 0 1.117-6.486A6.002 6.002 0 0 0 7.5 1.5Z"></path></svg>Code Quality</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enforce quality at merge</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dknd_">APPLICATION SECURITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Find and fix vulnerabilities</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/code-security" data-analytics-event="{&quot;action&quot;:&quot;code_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;code_security_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-code-square NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25Zm1.75-.25a.25.25 0 0 0-.25.25v12.5c0 .138.112.25.25.25h12.5a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25Zm7.47 3.97a.75.75 0 0 1 1.06 0l2 2a.75.75 0 0 1 0 1.06l-2 2a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L10.69 8 9.22 6.53a.75.75 0 0 1 0-1.06ZM6.78 6.53 5.31 8l1.47 1.47a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215l-2-2a.75.75 0 0 1 0-1.06l2-2a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>Code security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Secure your code as you build</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security/secret-protection" data-analytics-event="{&quot;action&quot;:&quot;secret_protection&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;secret_protection_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-lock NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M4 4a4 4 0 0 1 8 0v2h.25c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 12.25 15h-8.5A1.75 1.75 0 0 1 2 13.25v-5.5C2 6.784 2.784 6 3.75 6H4Zm8.25 3.5h-8.5a.25.25 0 0 0-.25.25v5.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25ZM10.5 6V4a2.5 2.5 0 1 0-5 0v2Z"></path></svg>Secret protection</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Stop leaks before they start</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ NavGroup-module__hasSeparator__FnMrN"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_hknd_">EXPLORE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_hknd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/why-github" data-analytics-event="{&quot;action&quot;:&quot;why_github&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;why_github_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Why GitHub</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog" data-analytics-event="{&quot;action&quot;:&quot;blog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;blog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Blog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://github.blog/changelog" data-analytics-event="{&quot;action&quot;:&quot;changelog&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;changelog_link_platform_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Changelog</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/marketplace" data-analytics-event="{&quot;action&quot;:&quot;marketplace&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;marketplace_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Marketplace</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/features" data-analytics-event="{&quot;action&quot;:&quot;view_all_features&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;platform&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_features_link_platform_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all features</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_17d_">Solutions<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_17d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5l7d_">BY COMPANY SIZE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprises&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprises_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Enterprises</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/team" data-analytics-event="{&quot;action&quot;:&quot;small_and_medium_teams&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;small_and_medium_teams_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Small and medium teams</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/enterprise/startups" data-analytics-event="{&quot;action&quot;:&quot;startups&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;startups_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Startups</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/nonprofits" data-analytics-event="{&quot;action&quot;:&quot;nonprofits&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;nonprofits_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Nonprofits</span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9l7d_">BY USE CASE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9l7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/app-modernization" data-analytics-event="{&quot;action&quot;:&quot;app_modernization&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;app_modernization_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">App Modernization</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devsecops" data-analytics-event="{&quot;action&quot;:&quot;devsecops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devsecops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevSecOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/use-case/ci-cd" data-analytics-event="{&quot;action&quot;:&quot;ci/cd&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ci/cd_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">CI/CD</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/use-case" data-analytics-event="{&quot;action&quot;:&quot;view_all_use_cases&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_use_cases_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all use cases</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dl7d_">BY INDUSTRY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dl7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/healthcare" data-analytics-event="{&quot;action&quot;:&quot;healthcare&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;healthcare_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Healthcare</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/financial-services" data-analytics-event="{&quot;action&quot;:&quot;financial_services&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;financial_services_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Financial services</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/manufacturing" data-analytics-event="{&quot;action&quot;:&quot;manufacturing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;manufacturing_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Manufacturing</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/industry/government" data-analytics-event="{&quot;action&quot;:&quot;government&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;government_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Government</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions/industry" data-analytics-event="{&quot;action&quot;:&quot;view_all_industries&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_industries_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all industries</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/solutions" data-analytics-event="{&quot;action&quot;:&quot;view_all_solutions&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;solutions&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_solutions_link_solutions_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all solutions</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_1nd_">Resources<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_1nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5lnd_">EXPLORE BY TOPIC</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=ai" data-analytics-event="{&quot;action&quot;:&quot;ai&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ai_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">AI</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=software-development" data-analytics-event="{&quot;action&quot;:&quot;software_development&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;software_development_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Software Development</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=devops" data-analytics-event="{&quot;action&quot;:&quot;devops&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;devops_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">DevOps</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/articles?topic=security" data-analytics-event="{&quot;action&quot;:&quot;security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources/articles" data-analytics-event="{&quot;action&quot;:&quot;view_all_topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_topics_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all topics</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9lnd_">EXPLORE BY TYPE</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9lnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/customer-stories" data-analytics-event="{&quot;action&quot;:&quot;customer_stories&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_stories_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer stories</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/events" data-analytics-event="{&quot;action&quot;:&quot;events__webinars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;events__webinars_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Events &amp; webinars</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/resources/whitepapers" data-analytics-event="{&quot;action&quot;:&quot;ebooks__reports&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;ebooks__reports_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Ebooks &amp; reports</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/solutions/executive-insights" data-analytics-event="{&quot;action&quot;:&quot;business_insights&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;business_insights_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Business insights</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://skills.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_skills&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_skills_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Skills</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dlnd_">SUPPORT &amp; SERVICES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dlnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://docs.github.com" data-analytics-event="{&quot;action&quot;:&quot;documentation&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;documentation_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Documentation</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://support.github.com" data-analytics-event="{&quot;action&quot;:&quot;customer_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;customer_support_link_resources_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Customer support</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/orgs/community/discussions" data-analytics-event="{&quot;action&quot;:&quot;community_forum&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;community_forum_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Community forum</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trust-center" data-analytics-event="{&quot;action&quot;:&quot;trust_center&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trust_center_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trust center</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/partners" data-analytics-event="{&quot;action&quot;:&quot;partners&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;partners_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Partners</span></a></li></ul></div></li></ul><div class="NavDropdown-module__trailingLinkContainer__VgJGL"><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--arrow-end___esdN8" href="https://github.com/resources" data-analytics-event="{&quot;action&quot;:&quot;view_all_resources&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;resources&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;view_all_resources_link_resources_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">View all resources</span><svg class="Primer_Brand__ExpandableArrow-module__ExpandableArrow___aaZs9 Primer_Brand__Link-module__Link-arrow___yd78i" width="16" height="16" viewBox="0 0 16 16" fill="none" aria-hidden="true" focusable="false"><path fill="currentColor" d="M7.28033 3.21967C6.98744 2.92678 6.51256 2.92678 6.21967 3.21967C5.92678 3.51256 5.92678 3.98744 6.21967 4.28033L7.28033 3.21967ZM11 8L11.5303 8.53033C11.8232 8.23744 11.8232 7.76256 11.5303 7.46967L11 8ZM6.21967 11.7197C5.92678 12.0126 5.92678 12.4874 6.21967 12.7803C6.51256 13.0732 6.98744 13.0732 7.28033 12.7803L6.21967 11.7197ZM6.21967 4.28033L10.4697 8.53033L11.5303 7.46967L7.28033 3.21967L6.21967 4.28033ZM10.4697 7.46967L6.21967 11.7197L7.28033 12.7803L11.5303 8.53033L10.4697 7.46967Z"></path><path class="Primer_Brand__ExpandableArrow-module__ExpandableArrow-stem___0K8Hz" stroke="currentColor" d="M1.75 8H11" stroke-width="1.5" stroke-linecap="round"></path></svg></a></div></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_27d_">Open Source<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_27d_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5m7d_">COMMUNITY</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/open-source/sponsors" data-analytics-event="{&quot;action&quot;:&quot;github_sponsors&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_sponsors_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sponsor-tiers NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.586 1C12.268 1 13.5 2.37 13.5 4.25c0 1.745-.996 3.359-2.622 4.831-.166.15-.336.297-.509.438l1.116 5.584a.75.75 0 0 1-.991.852l-2.409-.876a.25.25 0 0 0-.17 0l-2.409.876a.75.75 0 0 1-.991-.852L5.63 9.519a13.78 13.78 0 0 1-.51-.438C3.497 7.609 2.5 5.995 2.5 4.25 2.5 2.37 3.732 1 5.414 1c.963 0 1.843.403 2.474 1.073L8 2.198l.112-.125a3.385 3.385 0 0 1 2.283-1.068L10.586 1Zm-3.621 9.495-.718 3.594 1.155-.42a1.75 1.75 0 0 1 1.028-.051l.168.051 1.154.42-.718-3.592c-.199.13-.37.235-.505.314l-.169.097a.75.75 0 0 1-.72 0 9.54 9.54 0 0 1-.515-.308l-.16-.105ZM10.586 2.5c-.863 0-1.611.58-1.866 1.459-.209.721-1.231.721-1.44 0C7.025 3.08 6.277 2.5 5.414 2.5 4.598 2.5 4 3.165 4 4.25c0 1.23.786 2.504 2.128 3.719.49.443 1.018.846 1.546 1.198l.325.21.076-.047.251-.163a13.341 13.341 0 0 0 1.546-1.198C11.214 6.754 12 5.479 12 4.25c0-1.085-.598-1.75-1.414-1.75Z"></path></svg>GitHub Sponsors</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Fund open source developers</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9m7d_">PROGRAMS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9m7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://securitylab.github.com" data-analytics-event="{&quot;action&quot;:&quot;security_lab&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;security_lab_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Security Lab</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://maintainers.github.com" data-analytics-event="{&quot;action&quot;:&quot;maintainer_community&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;maintainer_community_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Maintainer Community</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://stars.github.com" data-analytics-event="{&quot;action&quot;:&quot;github_stars&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_stars_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">GitHub Stars</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 Primer_Brand__Link-module__Link--is-external___xsncV" href="https://archiveprogram.github.com" data-analytics-event="{&quot;action&quot;:&quot;archive_program&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;archive_program_link_open_source_navbar&quot;}" target="_blank" rel="noreferrer"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Archive Program</span><svg data-component="Octicon" focusable="false" aria-label="External link" class="octicon octicon-link-external" role="img" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z"></path></svg></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_dm7d_">REPOSITORIES</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_dm7d_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/topics" data-analytics-event="{&quot;action&quot;:&quot;topics&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;topics_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Topics</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/trending" data-analytics-event="{&quot;action&quot;:&quot;trending&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;trending_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Trending</span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0" href="https://github.com/collections" data-analytics-event="{&quot;action&quot;:&quot;collections&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;open_source&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;collections_link_open_source_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty">Collections</span></a></li></ul></div></li></ul></div></div></li><li><div class="NavDropdown-module__container__l2YeI"><button type="button" class="NavDropdown-module__button__PEHWX" aria-expanded="false" aria-controls="_R_2nd_">Enterprise<svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-right NavDropdown-module__buttonIcon__Tkl8_" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m6.427 4.427 3.396 3.396a.25.25 0 0 1 0 .354l-3.396 3.396A.25.25 0 0 1 6 11.396V4.604a.25.25 0 0 1 .427-.177Z"></path></svg></button><div id="_R_2nd_" class="NavDropdown-module__dropdown__xm1jd"><ul class="NavDropdown-module__list__zuCgG"><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_5mnd_">ENTERPRISE SOLUTIONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_5mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise" data-analytics-event="{&quot;action&quot;:&quot;enterprise_platform&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;enterprise_platform_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-stack NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.122.392a1.75 1.75 0 0 1 1.756 0l5.003 2.902c.83.481.83 1.68 0 2.162L8.878 8.358a1.75 1.75 0 0 1-1.756 0L2.119 5.456a1.251 1.251 0 0 1 0-2.162ZM8.125 1.69a.248.248 0 0 0-.25 0l-4.63 2.685 4.63 2.685a.248.248 0 0 0 .25 0l4.63-2.685ZM1.601 7.789a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0L1.874 8.814A.75.75 0 0 1 1.6 7.789Zm0 3.5a.75.75 0 0 1 1.025-.273l5.249 3.044a.248.248 0 0 0 .25 0l5.249-3.044a.75.75 0 0 1 .752 1.298l-5.248 3.044a1.75 1.75 0 0 1-1.756 0l-5.248-3.044a.75.75 0 0 1-.273-1.025Z"></path></svg>Enterprise platform</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">AI-powered developer platform</span></span></a></li></ul></div></li><li><div class="NavGroup-module__group__W8SqJ"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--monospace___QXHDQ Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavGroup-module__title__Wzxz2" id="_R_9mnd_">AVAILABLE ADD-ONS</span><ul class="NavGroup-module__list__UCOFy" aria-labelledby="_R_9mnd_"><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/security/advanced-security" data-analytics-event="{&quot;action&quot;:&quot;github_advanced_security&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;github_advanced_security_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-shield-check NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m8.533.133 5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667l5.25-1.68a1.748 1.748 0 0 1 1.066 0Zm-.61 1.429.001.001-5.25 1.68a.251.251 0 0 0-.174.237V7c0 1.36.275 2.666 1.057 3.859.784 1.194 2.121 2.342 4.366 3.298a.196.196 0 0 0 .154 0c2.245-.957 3.582-2.103 4.366-3.297C13.225 9.666 13.5 8.358 13.5 7V3.48a.25.25 0 0 0-.174-.238l-5.25-1.68a.25.25 0 0 0-.153 0ZM11.28 6.28l-3.5 3.5a.75.75 0 0 1-1.06 0l-1.5-1.5a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l.97.97 2.97-2.97a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path></svg>GitHub Advanced Security</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade security features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/features/copilot/copilot-business" data-analytics-event="{&quot;action&quot;:&quot;copilot_for_business&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;copilot_for_business_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copilot NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.998 15.035c-4.562 0-7.873-2.914-7.998-3.749V9.338c.085-.628.677-1.686 1.588-2.065.013-.07.024-.143.036-.218.029-.183.06-.384.126-.612-.201-.508-.254-1.084-.254-1.656 0-.87.128-1.769.693-2.484.579-.733 1.494-1.124 2.724-1.261 1.206-.134 2.262.034 2.944.765.05.053.096.108.139.165.044-.057.094-.112.143-.165.682-.731 1.738-.899 2.944-.765 1.23.137 2.145.528 2.724 1.261.566.715.693 1.614.693 2.484 0 .572-.053 1.148-.254 1.656.066.228.098.429.126.612.012.076.024.148.037.218.924.385 1.522 1.471 1.591 2.095v1.872c0 .766-3.351 3.795-8.002 3.795Zm0-1.485c2.28 0 4.584-1.11 5.002-1.433V7.862l-.023-.116c-.49.21-1.075.291-1.727.291-1.146 0-2.059-.327-2.71-.991A3.222 3.222 0 0 1 8 6.303a3.24 3.24 0 0 1-.544.743c-.65.664-1.563.991-2.71.991-.652 0-1.236-.081-1.727-.291l-.023.116v4.255c.419.323 2.722 1.433 5.002 1.433ZM6.762 2.83c-.193-.206-.637-.413-1.682-.297-1.019.113-1.479.404-1.713.7-.247.312-.369.789-.369 1.554 0 .793.129 1.171.308 1.371.162.181.519.379 1.442.379.853 0 1.339-.235 1.638-.54.315-.322.527-.827.617-1.553.117-.935-.037-1.395-.241-1.614Zm4.155-.297c-1.044-.116-1.488.091-1.681.297-.204.219-.359.679-.242 1.614.091.726.303 1.231.618 1.553.299.305.784.54 1.638.54.922 0 1.28-.198 1.442-.379.179-.2.308-.578.308-1.371 0-.765-.123-1.242-.37-1.554-.233-.296-.693-.587-1.713-.7Z"></path><path d="M6.25 9.037a.75.75 0 0 1 .75.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 .75-.75Zm4.25.75v1.501a.75.75 0 0 1-1.5 0V9.787a.75.75 0 0 1 1.5 0Z"></path></svg>Copilot for Business</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade AI features</span></span></a></li><li><a class="Primer_Brand__Link-module__Link___lF11y Primer_Brand__Link-module__Link--default___VRVW0 NavLink-module__link__EG3d4" href="https://github.com/enterprise/premium-support" data-analytics-event="{&quot;action&quot;:&quot;premium_support&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;enterprise&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;premium_support_link_enterprise_navbar&quot;}"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Link-module__Link--label___jM8Ty"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS Primer_Brand__Text-module__Text--weight-medium___qJKf_ NavLink-module__title__Q7t0p"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-comment-discussion NavLink-module__icon__ltGNM" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M1.75 1h8.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 10.25 10H7.061l-2.574 2.573A1.458 1.458 0 0 1 2 11.543V10h-.25A1.75 1.75 0 0 1 0 8.25v-5.5C0 1.784.784 1 1.75 1ZM1.5 2.75v5.5c0 .138.112.25.25.25h1a.75.75 0 0 1 .75.75v2.19l2.72-2.72a.749.749 0 0 1 .53-.22h3.5a.25.25 0 0 0 .25-.25v-5.5a.25.25 0 0 0-.25-.25h-8.5a.25.25 0 0 0-.25.25Zm13 2a.25.25 0 0 0-.25-.25h-.5a.75.75 0 0 1 0-1.5h.5c.966 0 1.75.784 1.75 1.75v5.5A1.75 1.75 0 0 1 14.25 12H14v1.543a1.458 1.458 0 0 1-2.487 1.03L9.22 12.28a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215l2.22 2.22v-2.19a.75.75 0 0 1 .75-.75h1a.25.25 0 0 0 .25-.25Z"></path></svg>Premium Support</span><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--muted___rE6mh Primer_Brand__Text-module__Text--200____P1wy Primer_Brand__Text-module__Text--antialiased___TYoXS NavLink-module__subtitle__X4gkW">Enterprise-grade 24/7 support</span></span></a></li></ul></div></li></ul></div></div></li><li><a href="https://github.com/pricing" data-analytics-event="{&quot;action&quot;:&quot;pricing&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;pricing&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;pricing_link_pricing_navbar&quot;}" class="MarketingNavigation-module__navLink__hUomM">Pricing</a></li></ul></nav><div class="MarketingHeader-module__ctaContainer__tBmPz"><div class="HeaderSearch-module__searchSlot__oVOUS"><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderSearch-module__trigger__zsF9q" type="button" aria-haspopup="dialog" aria-expanded="false" aria-label="Search or jump to, type / to search" data-analytics-event="{&quot;action&quot;:&quot;searchbar&quot;,&quot;tag&quot;:&quot;input&quot;,&quot;context&quot;:&quot;global&quot;,&quot;location&quot;:&quot;navbar&quot;,&quot;label&quot;:&quot;searchbar_input_global_navbar&quot;}"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"><span class="HeaderSearch-module__content__kMpxU"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search HeaderSearch-module__icon__wcrHX" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg><span class="HeaderSearch-module__label__d1iWG">Search</span><kbd class="HeaderSearch-module__kbd__HNG0o" aria-hidden="true">/</kbd></span></span></span></button><div class="d-none"></div></div><div class="AuthCTAs-module__signInWrap__q2P60"><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq AuthCTAs-module__desktopActionGap__UZuXT AuthCTAs-module__hiddenBelowLg__BfKBw" href="/login?return_to=https%3A%2F%2Fgithub.com%2FJunDaTang%2FAPIJSON%2Fblob%2Fmaster%2F%25E8%25AF%25A6%25E7%25BB%2586%25E7%259A%2584%25E8%25AF%25B4%25E6%2598%258E%25E6%2596%2587%25E6%25A1%25A3.md" data-analytics-event="{&quot;action&quot;:&quot;sign_in&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_in_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="437136313a16462408e1012a9fa6b2bdf101a6ae00ad82cd540848b8ead4fa4b"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH">Sign in</span></span></a></div><a class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--secondary___gHnw_ Primer_Brand__Button-module__Button--size-small___zQrEw AuthCTAs-module__cta__WpwQq" href="/signup?ref_cta=Sign+up&amp;ref_loc=header+logged+out&amp;ref_page=%2F%3Cuser-name%3E%2F%3Crepo-name%3E%2Fblob%2Fshow&amp;source=header-repo&amp;source_repo=JunDaTang%2FAPIJSON" data-analytics-event="{&quot;action&quot;:&quot;sign_up&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;context&quot;:&quot;auth_cta&quot;,&quot;location&quot;:&quot;header&quot;,&quot;label&quot;:&quot;sign_up_link_auth_cta_header&quot;}" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;site header menu&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;SIGN_UP&quot;,&quot;originating_url&quot;:&quot;https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="437136313a16462408e1012a9fa6b2bdf101a6ae00ad82cd540848b8ead4fa4b"><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-secondary___eJ0_a">Sign up</span></span></a><button class="Primer_Brand__Button-module__Button___scH9Z Primer_Brand__Button-module__Button--subtle___F7pEE Primer_Brand__Button-module__Button--size-small___zQrEw HeaderAppearanceSettings-module__trigger__hUheK" type="button" aria-haspopup="dialog" aria-labelledby="_R_fbd_"><span class="Primer_Brand__Button-module__Button__leading-visual___jjtTe" data-testid="Button-leading-visual"><svg data-component="Octicon" focusable="false" aria-hidden="true" class="octicon octicon-sliders Primer_Brand__Button-module__Button__icon-visual____qybb" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M15 2.75a.75.75 0 0 1-.75.75h-4a.75.75 0 0 1 0-1.5h4a.75.75 0 0 1 .75.75Zm-8.5.75v1.25a.75.75 0 0 0 1.5 0v-4a.75.75 0 0 0-1.5 0V2H1.75a.75.75 0 0 0 0 1.5H6.5Zm1.25 5.25a.75.75 0 0 0 0-1.5h-6a.75.75 0 0 0 0 1.5h6ZM15 8a.75.75 0 0 1-.75.75H11.5V10a.75.75 0 1 1-1.5 0V6a.75.75 0 0 1 1.5 0v1.25h2.75A.75.75 0 0 1 15 8Zm-9 5.25v-2a.75.75 0 0 0-1.5 0v1.25H1.75a.75.75 0 0 0 0 1.5H4.5v1.25a.75.75 0 0 0 1.5 0v-2Zm9 0a.75.75 0 0 1-.75.75h-6a.75.75 0 0 1 0-1.5h6a.75.75 0 0 1 .75.75Z"></path></svg></span><span class="Primer_Brand__Button-module__Button__text___ED0bX"><span class="Primer_Brand__Text-module__Text___XeGJJ Primer_Brand__Text-module__Text-font--mona-sans___a8XJD Primer_Brand__Text-module__Text--default___GhPh_ Primer_Brand__Text-module__Text--100___B2ueX Primer_Brand__Text-module__Text--weight-medium___qJKf_ Primer_Brand__Button-module__Button--label___qrkyz Primer_Brand__Button-module__Button--label-subtle___8ndWH"></span></span></button><div class="Primer_Brand__Tooltip-module__Tooltip___0Eipx" data-direction="s" aria-hidden="true" id="_R_fbd_">Appearance settings</div></div></div></div></div><div class="MarketingHeader-module__bottomBorder__uZT38" aria-hidden="true"></div></header></div></div>
</react-partial>



      <div hidden="hidden" data-view-component="true" class="js-stale-session-flash stale-session-flash flash flash-warn flash-full">
  
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span class="js-stale-session-flash-signed-in" hidden>You signed in with another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-signed-out" hidden>You signed out in another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>
        <span class="js-stale-session-flash-switched" hidden>You switched accounts on another tab or window. <a class="Link--inTextBlock" href="">Reload</a> to refresh your session.</span>

    <button id="icon-button-4adde3f4-6324-442b-94c9-3341e301d069" aria-labelledby="tooltip-fac08bb6-9d91-49b4-8619-5ccbb7f0ee6a" type="button" data-view-component="true" class="Button Button--iconOnly Button--invisible Button--medium flash-close js-flash-close">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x Button-visual">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
</button><tool-tip id="tooltip-fac08bb6-9d91-49b4-8619-5ccbb7f0ee6a" for="icon-button-4adde3f4-6324-442b-94c9-3341e301d069" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Dismiss alert</tool-tip>


  
</div>
    </div>

  <div id="start-of-content" class="show-on-focus"></div>








    <div id="js-flash-container" class="flash-container" data-turbo-replace>





  <template class="js-flash-template">
    
<div class="flash flash-full   {{ className }}">
  <div >
    <button autofocus class="flash-close js-flash-close" type="button" aria-label="Dismiss this message">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    <div aria-atomic="true" role="alert" class="js-flash-alert">
      
      <div>{{ message }}</div>

    </div>
  </div>
</div>
  </template>
</div>


    






  <div
    class="application-main "
    data-commit-hovercards-enabled
    data-discussion-hovercards-enabled
    data-issue-and-pr-hovercards-enabled
    data-project-hovercards-enabled
  >
        <div itemscope itemtype="http://schema.org/SoftwareSourceCode" class="">
    <main id="js-repo-pjax-container" >
      
      








  

    <div id="repository-container-header"  class="tmp-pt-3 hide-full-screen" style="background-color: var(--page-header-bgColor, var(--color-page-header-bg));" data-turbo-replace>

        <div class="d-flex flex-nowrap flex-justify-end tmp-mb-3  tmp-px-3 tmp-px-lg-5" style="gap: 1rem;">

          <div class="flex-auto min-width-0 width-fit">
              
  <div class=" d-flex flex-wrap flex-items-center wb-break-word f3 text-normal">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked color-fg-muted mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>
    
    <span class="author flex-self-stretch" itemprop="author">
      <a class="url fn" rel="author" data-hovercard-type="user" data-hovercard-url="/users/JunDaTang/hovercard" data-octo-click="hovercard-link-click" data-octo-dimensions="link_type:self" href="/JunDaTang">
        JunDaTang
</a>    </span>
    <span class="mx-1 flex-self-stretch color-fg-muted">/</span>
    <strong itemprop="name" class="mr-2 flex-self-stretch">
      <a data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" href="/JunDaTang/APIJSON">APIJSON</a>
    </strong>

    <span></span><span class="Label Label--secondary v-align-middle mr-1">Public</span>
  </div>
    <span class="text-small lh-condensed-ultra no-wrap mt-1" data-repository-hovercards-enabled>
      forked from <a data-hovercard-type="repository" data-hovercard-url="/APIJSON/APIJSON/hovercard" class="Link--inTextBlock" href="/APIJSON/APIJSON">APIJSON/APIJSON</a>
    </span>


          </div>

          <div id="repository-details-container" class="flex-shrink-0" data-turbo-replace style="max-width: 70%;">
              <ul class="pagehead-actions flex-shrink-0 d-none d-md-inline" style="padding: 2px 0;">
    
      

  <li>
            <a href="/login?return_to=%2FJunDaTang%2FAPIJSON" rel="nofollow" id="repository-details-watch-button" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;notification subscription menu watch&quot;,&quot;repository_id&quot;:null,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="6ad980174ea6af88021c4348c5f8467bf9287f043b1bc0a2f2315f437e4fe081" aria-label="You must be signed in to change notification settings" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-bell mr-2 tmp-mr-2">
    <path d="M8 16a2 2 0 0 0 1.985-1.75c.017-.137-.097-.25-.235-.25h-3.5c-.138 0-.252.113-.235.25A2 2 0 0 0 8 16ZM3 5a5 5 0 0 1 10 0v2.947c0 .05.015.098.042.139l1.703 2.555A1.519 1.519 0 0 1 13.482 13H2.518a1.516 1.516 0 0 1-1.263-2.36l1.703-2.554A.255.255 0 0 0 3 7.947Zm5-3.5A3.5 3.5 0 0 0 4.5 5v2.947c0 .346-.102.683-.294.97l-1.703 2.556a.017.017 0 0 0-.003.01l.001.006c0 .002.002.004.004.006l.006.004.007.001h10.964l.007-.001.006-.004.004-.006.001-.007a.017.017 0 0 0-.003-.01l-1.703-2.554a1.745 1.745 0 0 1-.294-.97V5A3.5 3.5 0 0 0 8 1.5Z"></path>
</svg>Notifications
</a>    <tool-tip id="tooltip-140c415f-8c63-4122-9081-641cf32d27ae" for="repository-details-watch-button" popover="manual" data-direction="s" data-type="description" data-view-component="true" class="sr-only position-absolute">You must be signed in to change notification settings</tool-tip>

  </li>

  <li>
          <a icon="repo-forked" id="fork-button" href="/login?return_to=%2FJunDaTang%2FAPIJSON" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;repo details fork button&quot;,&quot;repository_id&quot;:641347055,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="57c4b3b3e45c9e6158a2c977669016f2268a7baa3e02c5a3c640b229addc6747" data-view-component="true" class="btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-repo-forked mr-2 tmp-mr-2">
    <path d="M5 5.372v.878c0 .414.336.75.75.75h4.5a.75.75 0 0 0 .75-.75v-.878a2.25 2.25 0 1 1 1.5 0v.878a2.25 2.25 0 0 1-2.25 2.25h-1.5v2.128a2.251 2.251 0 1 1-1.5 0V8.5h-1.5A2.25 2.25 0 0 1 3.5 6.25v-.878a2.25 2.25 0 1 1 1.5 0ZM5 3.25a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Zm6.75.75a.75.75 0 1 0 0-1.5.75.75 0 0 0 0 1.5Zm-3 8.75a.75.75 0 1 0-1.5 0 .75.75 0 0 0 1.5 0Z"></path>
</svg>Fork
    <span id="repo-network-counter" data-pjax-replace="true" data-turbo-replace="true" title="0" data-view-component="true" class="Counter">0</span>
</a>
  </li>

  <li>
        <div data-view-component="true" class="BtnGroup d-flex">
        <a href="/login?return_to=%2FJunDaTang%2FAPIJSON" rel="nofollow" data-hydro-click="{&quot;event_type&quot;:&quot;authentication.click&quot;,&quot;payload&quot;:{&quot;location_in_page&quot;:&quot;star button&quot;,&quot;repository_id&quot;:641347055,&quot;auth_type&quot;:&quot;LOG_IN&quot;,&quot;originating_url&quot;:&quot;https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md&quot;,&quot;user_id&quot;:null}}" data-hydro-click-hmac="033ab636d1ae6107c27ee3759ccb3133cd683a209f3111b4571a260f50c17f3e" aria-label="You must be signed in to star a repository" data-view-component="true" class="tooltipped tooltipped-sw btn-sm btn">    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-star v-align-text-bottom d-inline-block mr-2 tmp-mr-2">
    <path d="M8 .25a.75.75 0 0 1 .673.418l1.882 3.815 4.21.612a.75.75 0 0 1 .416 1.279l-3.046 2.97.719 4.192a.751.751 0 0 1-1.088.791L8 12.347l-3.766 1.98a.75.75 0 0 1-1.088-.79l.72-4.194L.818 6.374a.75.75 0 0 1 .416-1.28l4.21-.611L7.327.668A.75.75 0 0 1 8 .25Zm0 2.445L6.615 5.5a.75.75 0 0 1-.564.41l-3.097.45 2.24 2.184a.75.75 0 0 1 .216.664l-.528 3.084 2.769-1.456a.75.75 0 0 1 .698 0l2.77 1.456-.53-3.084a.75.75 0 0 1 .216-.664l2.24-2.183-3.096-.45a.75.75 0 0 1-.564-.41L8 2.694Z"></path>
</svg><span data-view-component="true" class="d-inline">
          Star
</span>          <span id="repo-stars-counter-star" aria-label="0 users starred this repository" data-singular-suffix="user starred this repository" data-plural-suffix="users starred this repository" data-turbo-replace="true" title="0" data-view-component="true" class="Counter js-social-count">0</span>
</a></div>
  </li>

</ul>

          </div>
        </div>

          <div id="responsive-meta-container" data-turbo-replace>
</div>


            <nav data-pjax="#js-repo-pjax-container" aria-label="Repository" data-view-component="true" class="js-repo-nav js-sidenav-container-pjax js-responsive-underlinenav overflow-hidden UnderlineNav px-3 tmp-px-3 px-md-4 tmp-px-md-4 px-lg-5 tmp-px-lg-5">

  <ul data-view-component="true" class="UnderlineNav-body list-style-none">
      <li data-view-component="true" class="d-inline-flex">
  <a id="code-tab" href="/JunDaTang/APIJSON" data-tab-item="i0code-tab" data-selected-links="repo_source repo_downloads repo_commits repo_releases repo_tags repo_branches repo_packages repo_deployments repo_attestations /JunDaTang/APIJSON" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g c" data-command-id="repositories:go-to-code" data-react-nav="code-view" data-react-nav-anchor="code-view-repo-link" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Code&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" aria-current="page" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item selected">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code UnderlineNav-octicon d-none d-sm-inline">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        <span data-content="Code">Code</span>
          <span id="code-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="pull-requests-tab" href="/JunDaTang/APIJSON/pulls" data-tab-item="i1pull-requests-tab" data-selected-links="repo_pulls checks /JunDaTang/APIJSON/pulls" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g p" data-command-id="repositories:go-to-pull-requests" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Pull requests&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        <span data-content="Pull requests">Pull requests</span>
          <span id="pull-requests-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="actions-tab" href="/JunDaTang/APIJSON/actions" data-tab-item="i2actions-tab" data-selected-links="repo_actions /JunDaTang/APIJSON/actions" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g a" data-command-id="repositories:go-to-actions" data-react-nav="actions-workflows" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Actions&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play UnderlineNav-octicon d-none d-sm-inline">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        <span data-content="Actions">Actions</span>
          <span id="actions-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="projects-tab" href="/JunDaTang/APIJSON/projects" data-tab-item="i3projects-tab" data-selected-links="repo_projects new_repo_project repo_project /JunDaTang/APIJSON/projects" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g b" data-command-id="repositories:go-to-projects" data-react-nav="repo" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Projects&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table UnderlineNav-octicon d-none d-sm-inline">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        <span data-content="Projects">Projects</span>
          <span id="projects-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="security-and-quality-tab" href="/JunDaTang/APIJSON/security" data-tab-item="i4security-and-quality-tab" data-selected-links="security overview alerts policy token_scanning code_scanning /JunDaTang/APIJSON/security" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-hotkey="g s" data-command-id="repositories:go-to-security" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Security and quality&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield UnderlineNav-octicon d-none d-sm-inline">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        <span data-content="Security and quality">Security and quality</span>
          <span id="security-and-quality-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="0" hidden="hidden" data-view-component="true" class="Counter">0</span>


    
</a></li>
      <li data-view-component="true" class="d-inline-flex">
  <a id="insights-tab" href="/JunDaTang/APIJSON/pulse" data-tab-item="i5insights-tab" data-selected-links="repo_graphs repo_contributors dependency_graph dependabot_updates pulse people community /JunDaTang/APIJSON/pulse" data-pjax="#repo-content-pjax-container" data-turbo-frame="repo-content-turbo-frame" data-command-id="repositories:go-to-insights" data-analytics-event="{&quot;category&quot;:&quot;Underline navbar&quot;,&quot;action&quot;:&quot;Click tab&quot;,&quot;label&quot;:&quot;Insights&quot;,&quot;target&quot;:&quot;UNDERLINE_NAV.TAB&quot;}" data-view-component="true" class="UnderlineNav-item no-wrap js-responsive-underlinenav-item js-selected-navigation-item">
    
              <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph UnderlineNav-octicon d-none d-sm-inline">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        <span data-content="Insights">Insights</span>
          <span id="insights-repo-tab-count" data-pjax-replace="" data-turbo-replace="" title="Not available" data-view-component="true" class="Counter"></span>


    
</a></li>
</ul>
    <div style="visibility:hidden;" data-view-component="true" class="UnderlineNav-actions js-responsive-underlinenav-overflow position-absolute pr-3 tmp-pr-3 pr-md-4 tmp-pr-md-4 pr-lg-5 tmp-pr-lg-5 right-0">      <action-menu data-select-variant="none" data-view-component="true">
  <focus-group direction="vertical" mnemonics retain>
    <button id="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-button" popovertarget="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-overlay" aria-controls="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-list" aria-haspopup="true" aria-labelledby="tooltip-93995100-66a3-447c-a6b0-265c5ff905c8" type="button" data-view-component="true" class="Button Button--iconOnly Button--secondary Button--medium UnderlineNav-item">  <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-kebab-horizontal Button-visual">
    <path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path>
</svg>
</button><tool-tip id="tooltip-93995100-66a3-447c-a6b0-265c5ff905c8" for="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-button" popover="manual" data-direction="s" data-type="label" data-view-component="true" class="sr-only position-absolute">Additional navigation options</tool-tip>


<anchored-position data-target="action-menu.overlay" id="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-overlay" anchor="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-button" align="start" side="outside-bottom" anchor-offset="normal" popover="auto" data-view-component="true">
  <div data-view-component="true" class="Overlay Overlay--size-auto">
    
      <div data-view-component="true" class="Overlay-body Overlay-body--paddingNone">          <action-list>
  <div data-view-component="true">
    <ul aria-labelledby="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-button" id="action-menu-05351e1d-3945-4e30-91c1-269ac161f417-list" role="menu" data-view-component="true" class="ActionListWrap--inset ActionListWrap">
        <li hidden="hidden" data-menu-item="i0code-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-4d45cba2-4dee-4470-b62e-cfa7aa2c0d14" href="/JunDaTang/APIJSON" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-code">
    <path d="m11.28 3.22 4.25 4.25a.75.75 0 0 1 0 1.06l-4.25 4.25a.749.749 0 0 1-1.275-.326.749.749 0 0 1 .215-.734L13.94 8l-3.72-3.72a.749.749 0 0 1 .326-1.275.749.749 0 0 1 .734.215Zm-6.56 0a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L2.06 8l3.72 3.72a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L.47 8.53a.75.75 0 0 1 0-1.06Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Code
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i1pull-requests-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-4b68daf0-b9b7-4d28-9f56-40452c04d13a" href="/JunDaTang/APIJSON/pulls" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-git-pull-request">
    <path d="M1.5 3.25a2.25 2.25 0 1 1 3 2.122v5.256a2.251 2.251 0 1 1-1.5 0V5.372A2.25 2.25 0 0 1 1.5 3.25Zm5.677-.177L9.573.677A.25.25 0 0 1 10 .854V2.5h1A2.5 2.5 0 0 1 13.5 5v5.628a2.251 2.251 0 1 1-1.5 0V5a1 1 0 0 0-1-1h-1v1.646a.25.25 0 0 1-.427.177L7.177 3.427a.25.25 0 0 1 0-.354ZM3.75 2.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm0 9.5a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Zm8.25.75a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Pull requests
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i2actions-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-ad3b9378-8bbb-4623-b3aa-3b4facf9f6b8" href="/JunDaTang/APIJSON/actions" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-play">
    <path d="M8 0a8 8 0 1 1 0 16A8 8 0 0 1 8 0ZM1.5 8a6.5 6.5 0 1 0 13 0 6.5 6.5 0 0 0-13 0Zm4.879-2.773 4.264 2.559a.25.25 0 0 1 0 .428l-4.264 2.559A.25.25 0 0 1 6 10.559V5.442a.25.25 0 0 1 .379-.215Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Actions
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i3projects-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-ee12c2b7-3749-42bb-99e9-d7d1017e10b3" href="/JunDaTang/APIJSON/projects" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-table">
    <path d="M0 1.75C0 .784.784 0 1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25ZM6.5 6.5v8h7.75a.25.25 0 0 0 .25-.25V6.5Zm8-1.5V1.75a.25.25 0 0 0-.25-.25H6.5V5Zm-13 1.5v7.75c0 .138.112.25.25.25H5v-8ZM5 5V1.5H1.75a.25.25 0 0 0-.25.25V5Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Projects
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i4security-and-quality-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-b0d7039b-22a0-45ed-a172-462edbcf6b28" href="/JunDaTang/APIJSON/security" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-shield">
    <path d="M7.467.133a1.748 1.748 0 0 1 1.066 0l5.25 1.68A1.75 1.75 0 0 1 15 3.48V7c0 1.566-.32 3.182-1.303 4.682-.983 1.498-2.585 2.813-5.032 3.855a1.697 1.697 0 0 1-1.33 0c-2.447-1.042-4.049-2.357-5.032-3.855C1.32 10.182 1 8.566 1 7V3.48a1.75 1.75 0 0 1 1.217-1.667Zm.61 1.429a.25.25 0 0 0-.153 0l-5.25 1.68a.25.25 0 0 0-.174.238V7c0 1.358.275 2.666 1.057 3.86.784 1.194 2.121 2.34 4.366 3.297a.196.196 0 0 0 .154 0c2.245-.956 3.582-2.104 4.366-3.298C13.225 9.666 13.5 8.36 13.5 7V3.48a.251.251 0 0 0-.174-.237l-5.25-1.68ZM8.75 4.75v3a.75.75 0 0 1-1.5 0v-3a.75.75 0 0 1 1.5 0ZM9 10.5a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Security and quality
</span>      
</a>
  
</li>
        <li hidden="hidden" data-menu-item="i5insights-tab" data-targets="action-list.items" role="none" data-view-component="true" class="ActionListItem">
    
    
    <a tabindex="-1" id="item-19cecfd3-de0d-498a-b844-19d4b8f7efc3" href="/JunDaTang/APIJSON/pulse" role="menuitem" data-view-component="true" class="ActionListContent ActionListContent--visual16">
        <span class="ActionListItem-visual ActionListItem-visual--leading">
          <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-graph">
    <path d="M1.5 1.75V13.5h13.75a.75.75 0 0 1 0 1.5H.75a.75.75 0 0 1-.75-.75V1.75a.75.75 0 0 1 1.5 0Zm14.28 2.53-5.25 5.25a.75.75 0 0 1-1.06 0L7 7.06 4.28 9.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.25-3.25a.75.75 0 0 1 1.06 0L10 7.94l4.72-4.72a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042Z"></path>
</svg>
        </span>
      
        <span data-view-component="true" class="ActionListItem-label">
          Insights
</span>      
</a>
  
</li>
</ul>    
</div></action-list>


</div>
      
</div></anchored-position>  </focus-group>
</action-menu></div>
</nav>

    </div>
  



<turbo-frame id="repo-content-turbo-frame" target="_top" data-turbo-action="advance" class="">
    <div id="repo-content-pjax-container" class="repository-content " >
    



    
      
    








<react-app
  app-name="code-view"
  initial-path="/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md"
  style="display: block; min-height: calc(100vh - 64px);"
  data-attempted-ssr="true"
  data-ssr="true"
  data-lazy="false"
  data-alternate="false"
  data-data-router-enabled="true"
  data-react-profiling="false"
>
  
  <script type="application/json" data-target="react-app.embeddedData">{"payload":{"codeViewBlobRoute":{"csv":null,"csvError":null,"headerInfo":{"toc":[{"level":1,"text":"APIJSON 入门教程","anchor":"apijson-入门教程","htmlText":"APIJSON 入门教程"},{"level":2,"text":"A.介绍","anchor":"a介绍","htmlText":"A.介绍"},{"level":3,"text":"A1.关于接口开发","anchor":"a1关于接口开发","htmlText":"A1.关于接口开发"},{"level":3,"text":"A2.功能说明","anchor":"a2功能说明","htmlText":"A2.功能说明"},{"level":1,"text":"B.安装\u0026使用","anchor":"b安装使用","htmlText":"B.安装\u0026amp;使用"},{"level":2,"text":"B1.环境配置","anchor":"b1环境配置","htmlText":"B1.环境配置"},{"level":2,"text":"B2.下载项目","anchor":"b2下载项目","htmlText":"B2.下载项目"},{"level":2,"text":"B3.导入项目","anchor":"b3导入项目","htmlText":"B3.导入项目"},{"level":2,"text":"B4.错误修改","anchor":"b4错误修改","htmlText":"B4.错误修改"},{"level":2,"text":"C.开发说明","anchor":"c开发说明","htmlText":"C.开发说明"},{"level":3,"text":"C-1.基于 MySQL 数据库的开发流程","anchor":"c-1基于-mysql-数据库的开发流程","htmlText":"C-1.基于 MySQL 数据库的开发流程"},{"level":4,"text":"C-1-1.修改数据库链接","anchor":"c-1-1修改数据库链接","htmlText":"C-1-1.修改数据库链接"},{"level":4,"text":"C-1-2.导入表","anchor":"c-1-2导入表","htmlText":"C-1-2.导入表"},{"level":3,"text":"C-1-2-1.更多测试用例","anchor":"c-1-2-1更多测试用例","htmlText":"C-1-2-1.更多测试用例"},{"level":4,"text":"C-1-3.测试查询","anchor":"c-1-3测试查询","htmlText":"C-1-3.测试查询"},{"level":5,"text":"字段过滤","anchor":"字段过滤","htmlText":"字段过滤"},{"level":5,"text":"字段别名","anchor":"字段别名","htmlText":"字段别名"},{"level":5,"text":"逻辑运算","anchor":"逻辑运算","htmlText":"逻辑运算"},{"level":5,"text":"模糊查询","anchor":"模糊查询","htmlText":"模糊查询"},{"level":5,"text":"正则匹配","anchor":"正则匹配","htmlText":"正则匹配"},{"level":5,"text":"列表数据","anchor":"列表数据","htmlText":"列表数据"},{"level":5,"text":"分页","anchor":"分页","htmlText":"分页"},{"level":5,"text":"排序","anchor":"排序","htmlText":"排序"},{"level":5,"text":"关联查询","anchor":"关联查询","htmlText":"关联查询"},{"level":5,"text":"分组查询","anchor":"分组查询","htmlText":"分组查询"},{"level":4,"text":"C-1-4.登录","anchor":"c-1-4登录","htmlText":"C-1-4.登录"},{"level":4,"text":"C-1-5.测试新增","anchor":"c-1-5测试新增","htmlText":"C-1-5.测试新增"},{"level":4,"text":"C-1-4.测试修改","anchor":"c-1-4测试修改","htmlText":"C-1-4.测试修改"},{"level":4,"text":"C-1-5.测试删除","anchor":"c-1-5测试删除","htmlText":"C-1-5.测试删除"},{"level":3,"text":"C-2.新增接口","anchor":"c-2新增接口","htmlText":"C-2.新增接口"},{"level":4,"text":"1. 后台添加数据表","anchor":"1-后台添加数据表","htmlText":"1. 后台添加数据表"},{"level":4,"text":"2. 配置权限","anchor":"2-配置权限","htmlText":"2. 配置权限"},{"level":5,"text":"2.1）在 Access 表里加一行记录即可","anchor":"21在-access-表里加一行记录即可","htmlText":"2.1）在 Access 表里加一行记录即可"},{"level":5,"text":"2.1）在 Model 中添加对象并配置权限","anchor":"21在-model-中添加对象并配置权限","htmlText":"2.1）在 Model 中添加对象并配置权限"},{"level":4,"text":"3. 接口管理Request表的配置","anchor":"3-接口管理request表的配置","htmlText":"3. 接口管理Request表的配置"},{"level":4,"text":"4. 完整功能图表","anchor":"4-完整功能图表","htmlText":"4. 完整功能图表"}]},"issueTemplate":null,"discussionTemplate":null,"richText":"\u003carticle class=\"markdown-body entry-content container-lg\" itemprop=\"text\"\u003e\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eAPIJSON 入门教程\u003c/h1\u003e\u003ca id=\"user-content-apijson-入门教程\" class=\"anchor\" aria-label=\"Permalink: APIJSON 入门教程\" href=\"#apijson-入门教程\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e可以先看更清晰直观的视频教程 \u003cbr\u003e\n\u003ca href=\"https://search.bilibili.com/all?keyword=APIJSON\" rel=\"nofollow\"\u003ehttps://search.bilibili.com/all?keyword=APIJSON\u003c/a\u003e\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://user-images.githubusercontent.com/5738175/135413311-0207ec13-f7ea-4767-9e34-1a6d08438295.png\"\u003e\u003cimg src=\"https://user-images.githubusercontent.com/5738175/135413311-0207ec13-f7ea-4767-9e34-1a6d08438295.png\" alt=\"image\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e本文档已部署到官网，浏览和检索体验更好，但官网更新滞后，如有疏漏以本文档为准 \u003cbr\u003e\n\u003ca href=\"http://apijson.cn/doc/zh/\" rel=\"nofollow\"\u003ehttp://apijson.cn/doc/zh/\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e其它各种官方和第三方文档见首页相关推荐 \u003cbr\u003e\n\u003ca href=\"https://github.com/Tencent/APIJSON#%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90\"\u003ehttps://github.com/Tencent/APIJSON#%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eA.介绍\u003c/h2\u003e\u003ca id=\"user-content-a介绍\" class=\"anchor\" aria-label=\"Permalink: A.介绍\" href=\"#a介绍\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eA1.关于接口开发\u003c/h3\u003e\u003ca id=\"user-content-a1关于接口开发\" class=\"anchor\" aria-label=\"Permalink: A1.关于接口开发\" href=\"#a1关于接口开发\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e首先是看名字 \u003ccode\u003eAPIJSON\u003c/code\u003e，API 是说这个项目是属于接口开发的项目，JSON 是指传输数据格式是 JSON 格式。介于各位看官的水平高低不齐，这里就先为没有项目经验朋友啰嗦两句接口开发的内容。有经验的朋友可以跳到 \u003ccode\u003eA2\u003c/code\u003e 继续查看。完整的详细介绍见项目首页 \u003cbr\u003e\n\u003ca href=\"https://github.com/Tencent/APIJSON#--apijson\"\u003ehttps://github.com/Tencent/APIJSON#--apijson\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eA2.功能说明\u003c/h3\u003e\u003ca id=\"user-content-a2功能说明\" class=\"anchor\" aria-label=\"Permalink: A2.功能说明\" href=\"#a2功能说明\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e一个接口的开发，比如 Java 用 SpringBoot + Mybatis 来开发一般来说就像下面这个流程\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1545468341131.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1545468341131.png\" alt=\"1545468341131\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e部署上这个项目后，流程变成了这样\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1545468361962.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1545468361962.png\" alt=\"1545468361962\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果使用 \u003ca href=\"https://github.com/APIJSON/apijson-framework\"\u003eapijson-framework\u003c/a\u003e，还可进一步简化流程\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://raw.githubusercontent.com/Tencent/APIJSON/master/assets/1543975563776.png\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/Tencent/APIJSON/master/assets/1543975563776.png\" alt=\"1543975563776\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e换句话说，使用这个项目作为后端的支持的话，是不需要对每个表写增删改查等接口的，只需在该项目连接的数据里进行表的创建，以及配置接口权限即可。无需进行过多的开发，哪怕是要改结构也仅仅只需要修改表字段而已。想想仅仅是部署一个后端项目，现在需要写的接口就基本写好了，直接调用就行了，是不是挺爽的。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e说这么多，咱们直接开干吧！\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch1 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eB.安装\u0026amp;使用\u003c/h1\u003e\u003ca id=\"user-content-b安装使用\" class=\"anchor\" aria-label=\"Permalink: B.安装\u0026amp;使用\" href=\"#b安装使用\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eB1.环境配置\u003c/h2\u003e\u003ca id=\"user-content-b1环境配置\" class=\"anchor\" aria-label=\"Permalink: B1.环境配置\" href=\"#b1环境配置\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eJDK: 1.8+\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eMAVEN: 3.0+\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eMySQL 5.7+ / PostgreSQL 9.5+ / Oracle 12C+ / ClickHouse 21.1+ / Presto 0.277+ / Hive 3.1.2+ / ...\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIntelliJ IDEA 2018+ / Eclipse Java EE IDE 4.5.1+\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eB2.下载项目\u003c/h2\u003e\u003ca id=\"user-content-b2下载项目\" class=\"anchor\" aria-label=\"Permalink: B2.下载项目\" href=\"#b2下载项目\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"git clone https://github.com/APIJSON/APIJSON-Demo.git\"\u003e\u003cpre lang=\"git\" class=\"notranslate\"\u003e\u003ccode\u003egit clone https://github.com/APIJSON/APIJSON-Demo.git\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e或者，直接下载 ZIP 打包好的项目文件。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://user-images.githubusercontent.com/5738175/135412855-574cae7b-402c-4fe0-9959-711e580799af.png\"\u003e\u003cimg src=\"https://user-images.githubusercontent.com/5738175/135412855-574cae7b-402c-4fe0-9959-711e580799af.png\" alt=\"image\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eB3.导入项目\u003c/h2\u003e\u003ca id=\"user-content-b3导入项目\" class=\"anchor\" aria-label=\"Permalink: B3.导入项目\" href=\"#b3导入项目\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eEclipse 导入：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e顶部菜单 File \u0026gt; Import \u0026gt; Maven \u0026gt; Existing Maven Projects \u0026gt; Next \u0026gt; Browse\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e选择项目所在目录 \u003ca href=\"https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server\"\u003e/APIJSON-Demo-Master/APIJSON-Java-Server\u003c/a\u003e/APIJSONBoot\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e当报依赖错误的时候，将同目录下的 libs 里面的 jar 包添加到 Build Path 中。\n\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1542345887787.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1542345887787.png\" alt=\"1542345887787\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e为了方便修改源代码，你可以像我一样不添加 libs/APIJSON.jar 文件到 Build Path 中。而是将 libs/APIJSON.jar 的源码，复制到当前项目里，然后添加到 Build Path 中。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e源代码在 \u003ca href=\"https://github.com/Tencent/APIJSON\"\u003eAPIJSON-Master/APIJSON-Java-Server\u003c/a\u003e/APIJSONORM。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eIntelliJ IDEA 导入具体见：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#3%E7%94%A8-intellij-idea-ultimate-%E6%88%96-eclipse-for-javaee-%E8%BF%90%E8%A1%8C%E5%90%8E%E7%AB%AF%E5%B7%A5%E7%A8%8B\"\u003ehttps://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#3%E7%94%A8-intellij-idea-ultimate-%E6%88%96-eclipse-for-javaee-%E8%BF%90%E8%A1%8C%E5%90%8E%E7%AB%AF%E5%B7%A5%E7%A8%8B\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eB4.错误修改\u003c/h2\u003e\u003ca id=\"user-content-b4错误修改\" class=\"anchor\" aria-label=\"Permalink: B4.错误修改\" href=\"#b4错误修改\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e有可能 pom.xml 会报错，例如：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\u0026lt;project xmlns=\u0026quot;http://maven.apache.org/POM/4.0.0\u0026quot; xmlns:xsi=\u0026quot;http://www.w3.org/2001/XMLSchema-instance\u0026quot;\n\txsi:schemaLocation=\u0026quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\u0026quot;\u0026gt;\"\u003e\u003cpre\u003e\u0026lt;\u003cspan class=\"pl-s1\"\u003eproject\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003exmlns\u003c/span\u003e=\u003cspan class=\"pl-s\"\u003e\"http://maven.apache.org/POM/4.0.0\"\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003exmlns\u003c/span\u003e:\u003cspan class=\"pl-s1\"\u003exsi\u003c/span\u003e=\u003cspan class=\"pl-s\"\u003e\"http://www.w3.org/2001/XMLSchema-instance\"\u003c/span\u003e\n\t\u003cspan class=\"pl-s1\"\u003exsi\u003c/span\u003e:\u003cspan class=\"pl-s1\"\u003eschemaLocation\u003c/span\u003e=\u003cspan class=\"pl-s\"\u003e\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003c/span\u003e\u0026gt;\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这段代码中的这一句提示错误：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"xsi:schemaLocation=\u0026quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\u0026quot;\u0026gt;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s1\"\u003exsi\u003c/span\u003e:\u003cspan class=\"pl-s1\"\u003eschemaLocation\u003c/span\u003e=\u003cspan class=\"pl-s\"\u003e\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003c/span\u003e\u0026gt;\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e修改步骤：\u003c/p\u003e\n\u003cul dir=\"auto\"\u003e\n\u003cli\u003e请修改 Eclipse 中的 Maven 镜像地址，以便更快下载或者更新，具体方法自行百度；\u003c/li\u003e\n\u003cli\u003e打开 Eclipse-\u0026gt;Windows-\u0026gt;Preferences-\u0026gt;Maven-\u0026gt;Installations-\u0026gt;Add 这个按钮用于指定 Maven 的安装目录。这里不建议使用 Eclipse 自带的，需要再自己设置。最终效果如下图所示：\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install3.png\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install3.png\" alt=\"install3\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003cli\u003e打开 Eclipse-\u0026gt;Windows-\u0026gt;Preferences-\u0026gt;Maven-\u0026gt;User Settings 这是指定 setting.xml 的位置，同时导向自己的本地 maven 仓库。最终效果如下图所示：\n\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install4.png\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install4.png\" alt=\"install4\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/li\u003e\n\u003c/ul\u003e\n\u003cp dir=\"auto\"\u003e以上截图仅为示例，实际路径请以自己设定为准。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch2 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC.开发说明\u003c/h2\u003e\u003ca id=\"user-content-c开发说明\" class=\"anchor\" aria-label=\"Permalink: C.开发说明\" href=\"#c开发说明\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1.基于 MySQL 数据库的开发流程\u003c/h3\u003e\u003ca id=\"user-content-c-1基于-mysql-数据库的开发流程\" class=\"anchor\" aria-label=\"Permalink: C-1.基于 MySQL 数据库的开发流程\" href=\"#c-1基于-mysql-数据库的开发流程\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-1.修改数据库链接\u003c/h4\u003e\u003ca id=\"user-content-c-1-1修改数据库链接\" class=\"anchor\" aria-label=\"Permalink: C-1-1.修改数据库链接\" href=\"#c-1-1修改数据库链接\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如我的数据库信息是这样的\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e数据库参数\u003c/th\u003e\n\u003cth\u003e值\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e地址\u003c/td\u003e\n\u003ctd\u003elocalhost:3306\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e用户\u003c/td\u003e\n\u003ctd\u003eroot\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e密码\u003c/td\u003e\n\u003ctd\u003eapijson\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e数据库\u003c/td\u003e\n\u003ctd\u003esys\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e那么需要在 \u003ccode\u003eDemoSQLConfig\u003c/code\u003e 配置数据库\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\tstatic {\n\t\tDEFAULT_DATABASE = DATABASE_MYSQL;  // TODO 默认数据库类型，改成你自己的\n\t\tDEFAULT_SCHEMA = \u0026quot;sys\u0026quot;;  // TODO 默认数据库名/模式，改成你自己的，默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle: \n\t}\n\t\n\t@Override\n\tpublic String getDBVersion() {\n\t\treturn \u0026quot;5.7.22\u0026quot;;  // \u0026quot;8.0.11\u0026quot;;  // TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号  // MYSQL 8 和 7 使用的 JDBC 配置不一样\n\t}\n\t\n\t@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息\n\t@Override\n\tpublic String getDBUri() {\n\t\t// 这个是 MySQL 8.0 及以上，要加 userSSL=false  return \u0026quot;jdbc:mysql://localhost:3306?userSSL=false\u0026amp;serverTimezone=GMT%2B8\u0026amp;useUnicode=true\u0026amp;characterEncoding=UTF-8\u0026quot;;\n\t\t// 以下是 MySQL 5.7 及以下\n\t\treturn \u0026quot;jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8\u0026amp;useUnicode=true\u0026amp;characterEncoding=UTF-8\u0026quot;; //TODO 改成你自己的，TiDB 可以当成 MySQL 使用，默认端口为 4000\n\t}\n\t\n\t@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息\n\t@Override\n\tpublic String getDBAccount() {\n\t\treturn \u0026quot;root\u0026quot;;  // TODO 改成你自己的\n\t}\n\t\n\t@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息\n\t@Override\n\tpublic String getDBPassword() {\n\t\treturn \u0026quot;apijson\u0026quot;;  // TODO 改成你自己的，TiDB 可以当成 MySQL 使用， 默认密码为空字符串 \u0026quot;\u0026quot;\n\t}\"\u003e\u003cpre\u003e\t\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e {\n\t\t\u003cspan class=\"pl-c1\"\u003eDEFAULT_DATABASE\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003eDATABASE_MYSQL\u003c/span\u003e;  \u003cspan class=\"pl-c\"\u003e// TODO 默认数据库类型，改成你自己的\u003c/span\u003e\n\t\t\u003cspan class=\"pl-c1\"\u003eDEFAULT_SCHEMA\u003c/span\u003e = \u003cspan class=\"pl-s\"\u003e\"sys\"\u003c/span\u003e;  \u003cspan class=\"pl-c\"\u003e// TODO 默认数据库名/模式，改成你自己的，默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle: \u003c/span\u003e\n\t}\n\t\n\t\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eOverride\u003c/span\u003e\n\t\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egetDBVersion\u003c/span\u003e() {\n\t\t\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"5.7.22\"\u003c/span\u003e;  \u003cspan class=\"pl-c\"\u003e// \"8.0.11\";  // TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号  // MYSQL 8 和 7 使用的 JDBC 配置不一样\u003c/span\u003e\n\t}\n\t\n\t\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eJSONField\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eserialize\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e)  \u003cspan class=\"pl-c\"\u003e// 不在日志打印 账号/密码 等敏感信息\u003c/span\u003e\n\t\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eOverride\u003c/span\u003e\n\t\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egetDBUri\u003c/span\u003e() {\n\t\t\u003cspan class=\"pl-c\"\u003e// 这个是 MySQL 8.0 及以上，要加 userSSL=false  return \"jdbc:mysql://localhost:3306?userSSL=false\u0026amp;serverTimezone=GMT%2B8\u0026amp;useUnicode=true\u0026amp;characterEncoding=UTF-8\";\u003c/span\u003e\n\t\t\u003cspan class=\"pl-c\"\u003e// 以下是 MySQL 5.7 及以下\u003c/span\u003e\n\t\t\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8\u0026amp;useUnicode=true\u0026amp;characterEncoding=UTF-8\"\u003c/span\u003e; \u003cspan class=\"pl-c\"\u003e//TODO 改成你自己的，TiDB 可以当成 MySQL 使用，默认端口为 4000\u003c/span\u003e\n\t}\n\t\n\t\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eJSONField\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eserialize\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e)  \u003cspan class=\"pl-c\"\u003e// 不在日志打印 账号/密码 等敏感信息\u003c/span\u003e\n\t\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eOverride\u003c/span\u003e\n\t\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egetDBAccount\u003c/span\u003e() {\n\t\t\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"root\"\u003c/span\u003e;  \u003cspan class=\"pl-c\"\u003e// TODO 改成你自己的\u003c/span\u003e\n\t}\n\t\n\t\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eJSONField\u003c/span\u003e(\u003cspan class=\"pl-s1\"\u003eserialize\u003c/span\u003e = \u003cspan class=\"pl-c1\"\u003efalse\u003c/span\u003e)  \u003cspan class=\"pl-c\"\u003e// 不在日志打印 账号/密码 等敏感信息\u003c/span\u003e\n\t\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eOverride\u003c/span\u003e\n\t\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eString\u003c/span\u003e \u003cspan class=\"pl-en\"\u003egetDBPassword\u003c/span\u003e() {\n\t\t\u003cspan class=\"pl-k\"\u003ereturn\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"apijson\"\u003c/span\u003e;  \u003cspan class=\"pl-c\"\u003e// TODO 改成你自己的，TiDB 可以当成 MySQL 使用， 默认密码为空字符串 \"\"\u003c/span\u003e\n\t}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e具体见源码 \u003cbr\u003e\n\u003ca href=\"https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoSQLConfig.java\"\u003ehttps://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoSQLConfig.java\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-2.导入表\u003c/h4\u003e\u003ca id=\"user-content-c-1-2导入表\" class=\"anchor\" aria-label=\"Permalink: C-1-2.导入表\" href=\"#c-1-2导入表\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e在 \u003ca href=\"https://github.com/APIJSON/APIJSON-Demo/tree/master/MySQL\"\u003eAPIJSON-Demo-Master/MySQL\u003c/a\u003e 目录下有一批 SQL 脚本，他们看起来是这样的\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1542345654422.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1542345654422.png\" alt=\"1542345654422\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eMySQLWorkbench/Datagrip/Navicat 导入表具体见：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#2%E5%AF%BC%E5%85%A5%E8%A1%A8%E6%96%87%E4%BB%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93\"\u003ehttps://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#2%E5%AF%BC%E5%85%A5%E8%A1%A8%E6%96%87%E4%BB%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e导入完成之后。我们可以把项目跑起来看下，以刚刚配置的项目，项目是否能够连上数据库。其中也有一些初始化数据，可以方便我们测试。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-2-1.更多测试用例\u003c/h3\u003e\u003ca id=\"user-content-c-1-2-1更多测试用例\" class=\"anchor\" aria-label=\"Permalink: C-1-2-1.更多测试用例\" href=\"#c-1-2-1更多测试用例\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果需要更多测试用例，请按照以下步骤获取：\u003c/p\u003e\n\u003col dir=\"auto\"\u003e\n\u003cli\u003e用 Chrome(或 Firefox 等)浏览器中打开 \u003ca href=\"http://apijson.cn/api\" rel=\"nofollow\"\u003ehttp://apijson.cn/api\u003c/a\u003e ，或者 \u003ca href=\"http://apijson.cn\" rel=\"nofollow\"\u003ehttp://apijson.cn\u003c/a\u003e 然后点击按钮 [接口 APIAuto 测试] 也行；\u003c/li\u003e\n\u003cli\u003e点击右上角的“登录”按钮登录；\u003c/li\u003e\n\u003cli\u003e点击“测试账号”按钮左边第二个按钮，（也就是“-”左边的第一个）获取各种测试用例；\u003c/li\u003e\n\u003cli\u003e欢迎大家踊跃共享自己的测试用例；\u003c/li\u003e\n\u003c/ol\u003e\n\u003cp dir=\"auto\"\u003e也可以参考 APIAuto 的文档或视频：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/TommyLemon/APIAuto\"\u003ehttps://github.com/TommyLemon/APIAuto\u003c/a\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-3.测试查询\u003c/h4\u003e\u003ca id=\"user-content-c-1-3测试查询\" class=\"anchor\" aria-label=\"Permalink: C-1-3.测试查询\" href=\"#c-1-3测试查询\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e为了方便测试，我这里使用的 Chrome 浏览器的 Restlet Client 插件，大家可以根据自己的喜好使用不同的工具测试。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e使用 \u003ccode\u003ehttp://localhost:8080/get\u003c/code\u003e 测试结果。（请注意 DemoApplication.java 中使用 Tomcat 默认的 8080 端口，如果不小心开着PC端的“微信”，8080 端口会被占用，建议改成 8081, 9090 等其它应用程序未占用的端口。）\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e随便找一个表，比如 \u003ccode\u003eMoment\u003c/code\u003e 表，我们取其中 id 为 12 的一条出来看看\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1542350018926.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1542350018926.png\" alt=\"1542350018926\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e对接口地址 \u003ccode\u003ehttp://localhost:8080/get\u003c/code\u003e 发送一个 JSON 格式的请求\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1542350219020.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1542350219020.png\" alt=\"1542350219020\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e请求的JSON:\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;Moment\u0026quot;: {\n    \u0026quot;id\u0026quot;:12\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n    \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e响应的JSON：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;Moment\u0026quot;: {\n        \u0026quot;content\u0026quot;: \u0026quot;1111534034\u0026quot;,\n        \u0026quot;date\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n        \u0026quot;id\u0026quot;: 12,\n        \u0026quot;pictureList\u0026quot;: [\n            \u0026quot;http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg\u0026quot;,\n            \u0026quot;http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg\u0026quot;\n        ],\n        \u0026quot;praiseUserIdList\u0026quot;: [\n            70793,\n            93793,\n            82001\n        ],\n        \u0026quot;userId\u0026quot;: 70793\n    },\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n        \u003cspan class=\"pl-ent\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e1111534034\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e2017-02-08 16:06:11.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"pictureList\"\u003c/span\u003e: [\n            \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttp://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n            \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttp://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n        ],\n        \u003cspan class=\"pl-ent\"\u003e\"praiseUserIdList\"\u003c/span\u003e: [\n            \u003cspan class=\"pl-c1\"\u003e70793\u003c/span\u003e,\n            \u003cspan class=\"pl-c1\"\u003e93793\u003c/span\u003e,\n            \u003cspan class=\"pl-c1\"\u003e82001\u003c/span\u003e\n        ],\n        \u003cspan class=\"pl-ent\"\u003e\"userId\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e70793\u003c/span\u003e\n    },\n    \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e字段过滤\u003c/h5\u003e\u003ca id=\"user-content-字段过滤\" class=\"anchor\" aria-label=\"Permalink: 字段过滤\" href=\"#字段过滤\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这里这么多字段，如果我只想要这个 \u003ccode\u003econtent\u003c/code\u003e 字段的信息怎么办？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e你可以这样请求：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;Moment\u0026quot;: {\n    \u0026quot;id\u0026quot;:12,\n    \u0026quot;@column\u0026quot;:\u0026quot;content\u0026quot;\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n    \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003econtent\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e响应：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;Moment\u0026quot;: {\n        \u0026quot;content\u0026quot;: \u0026quot;1111534034\u0026quot;\n    },\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n        \u003cspan class=\"pl-ent\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e1111534034\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n    },\n    \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e@column\u003c/code\u003e 表示你要筛选出的字段，如果是多个字段可以这样写 \u003ccode\u003e\"@column\":\"id,date,content\"\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e字段别名\u003c/h5\u003e\u003ca id=\"user-content-字段别名\" class=\"anchor\" aria-label=\"Permalink: 字段别名\" href=\"#字段别名\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果想要使用字段的别名应该这样写：\u003ccode\u003e\"@column\":\"id,date:time,content:text\"\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;Moment\u0026quot;: {\n        \u0026quot;text\u0026quot;: \u0026quot;1111534034\u0026quot;,\n        \u0026quot;time\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n        \u0026quot;id\u0026quot;: 12\n    }\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n        \u003cspan class=\"pl-ent\"\u003e\"text\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e1111534034\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"time\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e2017-02-08 16:06:11.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e\n    }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这样在返回的数据中 \u003ccode\u003edate\u003c/code\u003e 字段就变成了 \u003ccode\u003etime\u003c/code\u003e, \u003ccode\u003econtent\u003c/code\u003e 字段变成了 \u003ccode\u003etext\u003c/code\u003e。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e逻辑运算\u003c/h5\u003e\u003ca id=\"user-content-逻辑运算\" class=\"anchor\" aria-label=\"Permalink: 逻辑运算\" href=\"#逻辑运算\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果想要筛选出，id 在 \u003ccode\u003e12,15,32\u003c/code\u003e 中的这三条数据的\u003ccode\u003e日期\u003c/code\u003e和\u003ccode\u003e内容\u003c/code\u003e怎么办呢？\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e请求：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;id{}\u0026quot;:[12,15,32],\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content\u0026quot;\n      }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"id{}\"\u003c/span\u003e:[\u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e32\u003c/span\u003e],\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n      }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e响应：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;[]\u0026quot;: [\n        {\n            \u0026quot;Moment\u0026quot;: {\n                \u0026quot;content\u0026quot;: \u0026quot;1111534034\u0026quot;,\n                \u0026quot;date\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n                \u0026quot;id\u0026quot;: 12\n            }\n        },\n        {\n            \u0026quot;Moment\u0026quot;: {\n                \u0026quot;content\u0026quot;: \u0026quot;APIJSON is a JSON Transmission Structure Protocol…\u0026quot;,\n                \u0026quot;date\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n                \u0026quot;id\u0026quot;: 15\n            }\n        },\n        {\n            \u0026quot;Moment\u0026quot;: {\n                \u0026quot;date\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n                \u0026quot;id\u0026quot;: 32\n            }\n        }\n    ],\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: [\n        {\n            \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n                \u003cspan class=\"pl-ent\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e1111534034\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e2017-02-08 16:06:11.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e\n            }\n        },\n        {\n            \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n                \u003cspan class=\"pl-ent\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eAPIJSON is a JSON Transmission Structure Protocol…\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e2017-02-08 16:06:11.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e15\u003c/span\u003e\n            }\n        },\n        {\n            \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n                \u003cspan class=\"pl-ent\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e2017-02-08 16:06:11.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e32\u003c/span\u003e\n            }\n        }\n    ],\n    \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果所要筛选的数据的是在一定范围内的，比如 id 是 300 到 400 之间的\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e你可以这样过滤 \u003ccode\u003e\"id\u0026amp;{}\":\"\u0026gt;=300,\u0026lt;=400\"\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u0026amp;的作用是表明后面的两个过滤条件的逻辑关系\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-sql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"(id \u0026gt;= 300 AND id \u0026lt;= 500)\"\u003e\u003cpre\u003e(id \u003cspan class=\"pl-k\"\u003e\u0026gt;=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e300\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eAND\u003c/span\u003e id \u003cspan class=\"pl-k\"\u003e\u0026lt;=\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e500\u003c/span\u003e)\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e现在的逻辑符号一共有三种，\u003ccode\u003e\u0026amp;\u003c/code\u003e，\u003ccode\u003e|\u003c/code\u003e，\u003ccode\u003e!\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e默认的逻辑关系是 \u003ccode\u003e|\u003c/code\u003e，也就是说 \u003ccode\u003e\"id|{}\":\"\u0026lt;=300,\u0026gt;=400\"\u003c/code\u003e 和 \u003ccode\u003e\"id{}\":\"\u0026lt;=300,\u0026gt;=400\"\u003c/code\u003e 等价。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e!\u003c/code\u003e主要用于反选，黑名单之类的\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e\"id!{}\":[12,15,32]\u003c/code\u003e 表示 \u003ccode\u003eid\u003c/code\u003e 不在 12，15，32 内的其他数据。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e复杂一些，如果多个条件相互组合，可以写多个关于id的过滤条件\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;id\u0026amp;{}\u0026quot;:\u0026quot;\u0026gt;=10,\u0026lt;=40\u0026quot;,\n        \u0026quot;id!{}\u0026quot;:[12],\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content:text\u0026quot;\n      }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"id\u0026amp;{}\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u0026gt;=10,\u0026lt;=40\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"id!{}\"\u003c/span\u003e:[\u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e],\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content:text\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n      }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e比如这里表示 id 在 10 到 40 之间，但是却不包含 12 的数据。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e模糊查询\u003c/h5\u003e\u003ca id=\"user-content-模糊查询\" class=\"anchor\" aria-label=\"Permalink: 模糊查询\" href=\"#模糊查询\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;content$\u0026quot;:\u0026quot;%APIJSON%\u0026quot;,\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content:text\u0026quot;\n      }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"content$\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e%APIJSON%\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content:text\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n      }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e使用方式有多种：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003ekeyword%\u003c/code\u003e，以 \u003ccode\u003ekeyword\u003c/code\u003e 开头的字符串。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e%keyword\u003c/code\u003e，以 \u003ccode\u003ekeyword\u003c/code\u003e 结束的字符串。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e%keyword%\u003c/code\u003e，包含 \u003ccode\u003ekeyword\u003c/code\u003e 的字符串，如：\u003ccode\u003ekeyword123\u003c/code\u003e, \u003ccode\u003e123keyword\u003c/code\u003e, \u003ccode\u003e123keyword123\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e%k%e%y%\u003c/code\u003e，包含字母 \u003ccode\u003ek\u003c/code\u003e, \u003ccode\u003ee\u003c/code\u003e, \u003ccode\u003ey\u003c/code\u003e 的字符串\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e还有几种比较便捷的方式，我们这里如果使用 \u003ccode\u003e\"content~\":\"keyword\"\u003c/code\u003e 来代替 \u003ccode\u003e\"content$\":\"%keyword%\"\u003c/code\u003e，同样可以表示包含某字符串\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e正则匹配\u003c/h5\u003e\u003ca id=\"user-content-正则匹配\" class=\"anchor\" aria-label=\"Permalink: 正则匹配\" href=\"#正则匹配\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;content~\u0026quot;:\u0026quot;^[0-9]+$\u0026quot;,\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content:text\u0026quot;\n      }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"content~\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e^[0-9]+$\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content:text\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n      }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e正则表达式 \u003ccode\u003e^[0-9]+$\u003c/code\u003e，查询 \u003ccode\u003econtent\u003c/code\u003e 为纯数字的数据，\u003ca href=\"http://www.runoob.com/mysql/mysql-regexp.html\" rel=\"nofollow\"\u003eMySQL 的正则语法\u003c/a\u003e 如下：\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e模式\u003c/th\u003e\n\u003cth\u003e描述\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e^\u003c/td\u003e\n\u003ctd\u003e匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\\n' 或 '\\r' 之后的位置。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e$\u003c/td\u003e\n\u003ctd\u003e匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\\n' 或 '\\r' 之前的位置。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e.\u003c/td\u003e\n\u003ctd\u003e匹配除 \"\\n\" 之外的任何单个字符。要匹配包括 '\\n' 在内的任何字符，请使用象 '[.\\n]' 的模式。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[...]\u003c/td\u003e\n\u003ctd\u003e字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 \"plain\" 中的 'a'。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e[^...]\u003c/td\u003e\n\u003ctd\u003e负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 \"plain\" 中的'p'。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003ep1|p2|p3\u003c/td\u003e\n\u003ctd\u003e匹配 p1 或 p2 或 p3。例如，'z|food' 能匹配 \"z\" 或 \"food\"。'(z|f)ood' 则匹配 \"zood\" 或 \"food\"。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e*\u003c/td\u003e\n\u003ctd\u003e匹配前面的子表达式零次或多次。例如，zo* 能匹配 \"z\" 以及 \"zoo\"。* 等价于{0,}。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e+\u003c/td\u003e\n\u003ctd\u003e匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 \"zo\" 以及 \"zoo\"，但不能匹配 \"z\"。+ 等价于 {1,}。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e{n}\u003c/td\u003e\n\u003ctd\u003en 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 \"Bob\" 中的 'o'，但是能匹配 \"food\" 中的两个 o。\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e{n,m}\u003c/td\u003e\n\u003ctd\u003em 和 n 均为非负整数，其中n \u0026lt;= m。最少匹配 n 次且最多匹配 m 次。\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e列表数据\u003c/h5\u003e\u003ca id=\"user-content-列表数据\" class=\"anchor\" aria-label=\"Permalink: 列表数据\" href=\"#列表数据\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e之前我们看到返回的数据是这样的\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;Moment\u0026quot;: {\n        \u0026quot;content\u0026quot;: \u0026quot;1111534034\u0026quot;,\n        \u0026quot;date\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n        \u0026quot;id\u0026quot;: 12,\n        \u0026quot;pictureList\u0026quot;: [\n            \u0026quot;http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg\u0026quot;,\n            \u0026quot;http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg\u0026quot;\n        ],\n        \u0026quot;praiseUserIdList\u0026quot;: [\n            70793,\n            93793,\n            82001\n        ],\n        \u0026quot;userId\u0026quot;: 70793\n    },\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n        \u003cspan class=\"pl-ent\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e1111534034\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e2017-02-08 16:06:11.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"pictureList\"\u003c/span\u003e: [\n            \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttp://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n            \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003ehttp://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n        ],\n        \u003cspan class=\"pl-ent\"\u003e\"praiseUserIdList\"\u003c/span\u003e: [\n            \u003cspan class=\"pl-c1\"\u003e70793\u003c/span\u003e,\n            \u003cspan class=\"pl-c1\"\u003e93793\u003c/span\u003e,\n            \u003cspan class=\"pl-c1\"\u003e82001\u003c/span\u003e\n        ],\n        \u003cspan class=\"pl-ent\"\u003e\"userId\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e70793\u003c/span\u003e\n    },\n    \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e里面的 \u003ccode\u003epictureList\u003c/code\u003e 和 \u003ccode\u003epraiseUserIdList\u003c/code\u003e 是数组，这种数据在 MySQL 数据库中是 JSON 数据格式的。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1542357146401.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1542357146401.png\" alt=\"1542357146401\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e数据库里存储的值是这样的\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1542357265371.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1542357265371.png\" alt=\"1542357265371\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果我们想过滤出里面有 \u003ccode\u003e82001\u003c/code\u003e 的数据，我们应该这样请求\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;praiseUserIdList\u0026lt;\u0026gt;\u0026quot;:82001,\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content,praiseUserIdList\u0026quot;\n      }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"praiseUserIdList\u0026lt;\u0026gt;\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e82001\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content,praiseUserIdList\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n      }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e结果是类似这样的，为了显示方便剔除了一些数据。\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;[]\u0026quot;: [ // JavaScript/TypeScript/Python 中可用 data[\u0026quot;[]\u0026quot;] 来提取不符合变量名格式的 key 对应的 value，Java 等可以用 data.getJSONArray(\u0026quot;[]\u0026quot;) 等。\n        \n        {\n            \u0026quot;Moment\u0026quot;: {\n                \u0026quot;date\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n                \u0026quot;id\u0026quot;: 32,\n                \u0026quot;praiseUserIdList\u0026quot;: [\n                    38710,\n                    82002,\n                    82001\n                ]\n            }\n        },\n        {\n            \u0026quot;Moment\u0026quot;: {\n                \u0026quot;content\u0026quot;: \u0026quot;This is a Content...-435\u0026quot;,\n                \u0026quot;date\u0026quot;: \u0026quot;2017-02-01 19:14:31.0\u0026quot;,\n                \u0026quot;id\u0026quot;: 58,\n                \u0026quot;praiseUserIdList\u0026quot;: [\n                    38710,\n                    82003,\n                    82001\n                ]\n            }\n        },\n        {\n            \u0026quot;Moment\u0026quot;: {\n                \u0026quot;content\u0026quot;: \u0026quot;https://gss2.bdstatic.com/-fo3dSag_xIb.jpg\u0026quot;,\n                \u0026quot;date\u0026quot;: \u0026quot;2018-10-27 17:58:02.0\u0026quot;,\n                \u0026quot;id\u0026quot;: 1540634282433,\n                \u0026quot;praiseUserIdList\u0026quot;: [\n                    82001\n                ]\n            }\n        }\n    ],\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-s\"\u003e\"[]\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// JavaScript/TypeScript/Python 中可用 data[\"[]\"] 来提取不符合变量名格式的 key 对应的 value，Java 等可以用 data.getJSONArray(\"[]\") 等。\u003c/span\u003e\n        \n        \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s\"\u003e\"Moment\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"2017-02-08 16:06:11.0\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e32\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"praiseUserIdList\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003e38710\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003e82002\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003e82001\u003c/span\u003e\n                \u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s\"\u003e\"Moment\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"This is a Content...-435\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"2017-02-01 19:14:31.0\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e58\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"praiseUserIdList\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003e38710\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003e82003\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003e82001\u003c/span\u003e\n                \u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n            \u003cspan class=\"pl-s\"\u003e\"Moment\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"content\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"https://gss2.bdstatic.com/-fo3dSag_xIb.jpg\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"2018-10-27 17:58:02.0\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1540634282433\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n                \u003cspan class=\"pl-s\"\u003e\"praiseUserIdList\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e[\u003c/span\u003e\n                    \u003cspan class=\"pl-c1\"\u003e82001\u003c/span\u003e\n                \u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\n            \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n        \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e]\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n    \u003cspan class=\"pl-s\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n    \u003cspan class=\"pl-s\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"success\"\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e分页\u003c/h5\u003e\u003ca id=\"user-content-分页\" class=\"anchor\" aria-label=\"Permalink: 分页\" href=\"#分页\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e对于数量太多的数据，我们很多时候都需要分页操作，这时候我们可以用类似下面这样的请求\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content,praiseUserIdList\u0026quot;\n      },\n    \u0026quot;page\u0026quot;: 0,\n    \u0026quot;count\u0026quot;: 5\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content,praiseUserIdList\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n      },\n    \u003cspan class=\"pl-ent\"\u003e\"page\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"count\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e请注意，这里的 \u003ccode\u003epage\u003c/code\u003e 和 \u003ccode\u003ecount\u003c/code\u003e 是放在 \u003ccode\u003e[] \u003c/code\u003e内的属性，而不是 \u003ccode\u003eMoment\u003c/code\u003e 对象里。这里 \u003ccode\u003ecount\u003c/code\u003e 表示每页的数量，\u003ccode\u003epage\u003c/code\u003e 表示第几页，页数从 0 开始算。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e也许你想看看这个请求对应的SQL语句\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-sql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"SELECT `id`,`date`,`content`,`praiseUserIdList` FROM `sys`.`Moment` LIMIT 5 OFFSET 0\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003eSELECT\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003eid\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e,\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003edate\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e,\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003econtent\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e,\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003epraiseUserIdList\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eFROM\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003esys\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e.\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003eMoment\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eLIMIT\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003e5\u003c/span\u003e OFFSET \u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这里\u003ccode\u003esys\u003c/code\u003e是我自己的\u003ccode\u003eschema\u003c/code\u003e的名字，你的可能会有所不同。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果不想分页的，也提供了一套特殊的查询方式。这种查询方式有三种，请求方式类型这样\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content,praiseUserIdList\u0026quot;\n      },\n      \u0026quot;query\u0026quot;: 2\n  },\n  \u0026quot;total@\u0026quot;:\u0026quot;/[]/total\u0026quot; // key 里的 total 可改成 num 等几乎任意其它名称，还可以用 \u0026quot;info@\u0026quot;: \u0026quot;/[]/info\u0026quot; 获取更详细的分页信息\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-s\"\u003e\"[]\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n      \u003cspan class=\"pl-s\"\u003e\"Moment\"\u003c/span\u003e:\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\"id,date,content,praiseUserIdList\"\u003c/span\u003e\n      \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n      \u003cspan class=\"pl-s\"\u003e\"query\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n  \u003cspan class=\"pl-s\"\u003e\"total@\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\"/[]/total\"\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// key 里的 total 可改成 num 等几乎任意其它名称，还可以用 \"info@\": \"/[]/info\" 获取更详细的分页信息\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这里因为 \u003ccode\u003equery\u003c/code\u003e 的值是 2，所有会同时查询 \u003ccode\u003eMoment\u003c/code\u003e 表中的数据和总数。如果是 1 的话，则只会返回当前表的总数：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\u0026quot;total\u0026quot;:59,\u0026quot;code\u0026quot;:200,\u0026quot;msg\u0026quot;:\u0026quot;success\u0026quot;}\"\u003e\u003cpre\u003e{\u003cspan class=\"pl-ent\"\u003e\"total\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e59\u003c/span\u003e,\u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e数据库中的数量：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1544515879364.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1544515879364.png\" alt=\"1544515879364\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e当然，如果你添加了过滤条件，返回的数量就会是你所过滤的数量，比如：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content,praiseUserIdList\u0026quot;,\n        \u0026quot;praiseUserIdList\u0026lt;\u0026gt;\u0026quot;:38710\n      },\n      \u0026quot;query\u0026quot;: 1\n  },\n  \u0026quot;total@\u0026quot;:\u0026quot;/[]/total\u0026quot;\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content,praiseUserIdList\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"praiseUserIdList\u0026lt;\u0026gt;\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e38710\u003c/span\u003e\n      },\n      \u003cspan class=\"pl-ent\"\u003e\"query\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e\n  },\n  \u003cspan class=\"pl-ent\"\u003e\"total@\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e/[]/total\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e返回：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\u0026quot;total\u0026quot;:12,\u0026quot;code\u0026quot;:200,\u0026quot;msg\u0026quot;:\u0026quot;success\u0026quot;}\"\u003e\u003cpre\u003e{\u003cspan class=\"pl-ent\"\u003e\"total\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e,\u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e排序\u003c/h5\u003e\u003ca id=\"user-content-排序\" class=\"anchor\" aria-label=\"Permalink: 排序\" href=\"#排序\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e要使用排序的话，这样操作\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Moment\u0026quot;:{\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,content,praiseUserIdList\u0026quot;,\n        \u0026quot;praiseUserIdList\u0026lt;\u0026gt;\u0026quot;:38710,\n        \u0026quot;@order\u0026quot;:\u0026quot;date-,id,content+\u0026quot;\n      }\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: {\n      \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n        \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eid,date,content,praiseUserIdList\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"praiseUserIdList\u0026lt;\u0026gt;\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e38710\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"@order\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003edate-,id,content+\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n      }\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e\"@order\": \"date-,id,content+\"\u003c/code\u003e 其中，字段的前后顺序表示字段排序的优先级。\u003ccode\u003eid\u003c/code\u003e 和 \u003ccode\u003eid+\u003c/code\u003e 是等价的，默认就是升序排列。\u003ccode\u003edate-\u003c/code\u003e 表示将 \u003ccode\u003edate\u003c/code\u003e 字段降序排列。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e关联查询\u003c/h5\u003e\u003ca id=\"user-content-关联查询\" class=\"anchor\" aria-label=\"Permalink: 关联查询\" href=\"#关联查询\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e在讲解关联查询的时候，我们需要先了解下表之间的关系\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e现在有两张表 Moment 和 User，两张表的关系是下面这样\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer\" href=\"/JunDaTang/APIJSON/blob/master/assets/1545468294295.png\"\u003e\u003cimg src=\"/JunDaTang/APIJSON/raw/master/assets/1545468294295.png\" alt=\"1545468294295\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003eMOMENT表示动态，类似微信朋友圈、QQ 空间的动态，每一条动态会有一个发表动态的用户 User，所以 Moment 表里会有一个和 User 表的外键关联：Moment.userId = User.id。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e对于这样的数据关系，我们在查询动态时，很多时候我们会连带着用户一起查处来，这样又如何操作呢\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n    \u0026quot;Moment\u0026quot;:{\n        \u0026quot;@column\u0026quot;:\u0026quot;id,date,userId\u0026quot;,\n        \u0026quot;id\u0026quot;:12 // 注意 id 是主键，这个数组最多返回 1 条子项（如果 id=12 的表记录存在）\n    },\n    \u0026quot;User\u0026quot;:{\n      \u0026quot;id@\u0026quot;:\u0026quot;/Moment/userId\u0026quot;, // 不要求物理外键，只要能关联即可\n      \u0026quot;@column\u0026quot;:\u0026quot;id,name\u0026quot;\n    }\n  }\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n  \u003cspan class=\"pl-s\"\u003e\"[]\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n    \u003cspan class=\"pl-s\"\u003e\"Moment\"\u003c/span\u003e:\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n        \u003cspan class=\"pl-s\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\"id,date,userId\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n        \u003cspan class=\"pl-s\"\u003e\"id\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// 注意 id 是主键，这个数组最多返回 1 条子项（如果 id=12 的表记录存在）\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e\n    \u003cspan class=\"pl-s\"\u003e\"User\"\u003c/span\u003e:\u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e\n      \u003cspan class=\"pl-s\"\u003e\"id@\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\"/Moment/userId\"\u003c/span\u003e\u003cspan class=\"pl-kos\"\u003e,\u003c/span\u003e \u003cspan class=\"pl-c\"\u003e// 不要求物理外键，只要能关联即可\u003c/span\u003e\n      \u003cspan class=\"pl-s\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\"id,name\"\u003c/span\u003e\n    \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n  \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\n\u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这个请求稍微复杂点，首先我们用 \u003ccode\u003e[]\u003c/code\u003e 对象表示我们是想查询出一个列表，这个列表包含两个部分 \u003ccode\u003eMoment\u003c/code\u003e 和 \u003ccode\u003eUser\u003c/code\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e其中 \u003ccode\u003eMoment\u003c/code\u003e 是我们想要查询的主要内容，它的写法也和一般查询数据时无异。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003eUser\u003c/code\u003e 是与 \u003ccode\u003eMoment\u003c/code\u003e 相关联的数据，所以查询的时候我们需要用 \u003ccode\u003eid@\u003c/code\u003e 来表示他们之间的关联关系\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003e/Moment/userId\u003c/code\u003e 中，最开始的 \u003ccode\u003e/\u003c/code\u003e 相当于是指明了 \u003ccode\u003e[]\u003c/code\u003e 的位置，\u003ccode\u003e/Moment\u003c/code\u003e 表示 \u003ccode\u003e[]\u003c/code\u003e 对象下的 \u003ccode\u003eMoemnt\u003c/code\u003e 对象，\u003ccode\u003e/Moment/userId\u003c/code\u003e 表示 \u003ccode\u003eMoment\u003c/code\u003e 的 \u003ccode\u003euserId\u003c/code\u003e 字段是与 \u003ccode\u003eUser\u003c/code\u003e 的 \u003ccode\u003eid\u003c/code\u003e 关联的。这是一种缺省引用路径，这里等价于完整引用路径 \u003ccode\u003e[]/Moment/userId\u003c/code\u003e。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e响应的数据：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;[]\u0026quot;: [\n        {\n            \u0026quot;Moment\u0026quot;: {\n                \u0026quot;date\u0026quot;: \u0026quot;2017-02-08 16:06:11.0\u0026quot;,\n                \u0026quot;id\u0026quot;: 12,\n                \u0026quot;userId\u0026quot;: 70793\n            },\n            \u0026quot;User\u0026quot;: {\n                \u0026quot;id\u0026quot;: 70793,\n                \u0026quot;name\u0026quot;: \u0026quot;Strong\u0026quot;\n            }\n        }\n    ],\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"[]\"\u003c/span\u003e: [\n        {\n            \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n                \u003cspan class=\"pl-ent\"\u003e\"date\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e2017-02-08 16:06:11.0\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e12\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"userId\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e70793\u003c/span\u003e\n            },\n            \u003cspan class=\"pl-ent\"\u003e\"User\"\u003c/span\u003e: {\n                \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e70793\u003c/span\u003e,\n                \u003cspan class=\"pl-ent\"\u003e\"name\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eStrong\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n            }\n        }\n    ],\n    \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e分组查询\u003c/h5\u003e\u003ca id=\"user-content-分组查询\" class=\"anchor\" aria-label=\"Permalink: 分组查询\" href=\"#分组查询\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e在了解分组查询之前，我们需要先了解下 APIJSON 所支持的部分常见函数：\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003e函数名\u003c/th\u003e\n\u003cth\u003e说明\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003ecount\u003c/td\u003e\n\u003ctd\u003e统计分组下，某字段的个数\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003esum\u003c/td\u003e\n\u003ctd\u003e统计分组下，某字段的和\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emax\u003c/td\u003e\n\u003ctd\u003e统计分组下，某字段的最大值\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003emin\u003c/td\u003e\n\u003ctd\u003e统计分组下，某字段的最小值\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003eavg\u003c/td\u003e\n\u003ctd\u003e统计分组下，某字段的平均值\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e具体见 AbstractSQLConfig 中 SQL_FUNCTION_MAP 配置的所有 SQL 函数 ：\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L286-L765\"\u003ehttps://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L286-L765\u003c/a\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e比如，如果只是单纯的查出最大值，这样请求就可以了\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;Moment\u0026quot;:{\n     \u0026quot;@column\u0026quot;:\u0026quot;max(id):maxid\u0026quot;\n  }\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n     \u003cspan class=\"pl-ent\"\u003e\"@column\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003emax(id):maxid\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n  }\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e响应：\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;Moment\u0026quot;: {\n     \u0026quot;maxid\u0026quot;: 1541912160047\n  },\n  \u0026quot;code\u0026quot;: 200,\n  \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n     \u003cspan class=\"pl-ent\"\u003e\"maxid\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1541912160047\u003c/span\u003e\n  },\n  \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n  \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这里 \u003ccode\u003emaxid\u003c/code\u003e 是我们取的别名\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e如果是有分组条件的，那我们需要使用 \u003ccode\u003e@group\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e比如，像下面 Sale 表，这张表表示，2018年1月1日某公司门下的 3 个店铺（store_id）的营业额（amt）数据\u003c/p\u003e\n\u003cmarkdown-accessiblity-table\u003e\u003ctable\u003e\n\u003cthead\u003e\n\u003ctr\u003e\n\u003cth\u003eid\u003c/th\u003e\n\u003cth\u003estore_id\u003c/th\u003e\n\u003cth\u003eamt\u003c/th\u003e\n\u003c/tr\u003e\n\u003c/thead\u003e\n\u003ctbody\u003e\n\u003ctr\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003e100\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003e1\u003c/td\u003e\n\u003ctd\u003e80\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003e30\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e4\u003c/td\u003e\n\u003ctd\u003e2\u003c/td\u003e\n\u003ctd\u003e100\u003c/td\u003e\n\u003c/tr\u003e\n\u003ctr\u003e\n\u003ctd\u003e5\u003c/td\u003e\n\u003ctd\u003e3\u003c/td\u003e\n\u003ctd\u003e210\u003c/td\u003e\n\u003c/tr\u003e\n\u003c/tbody\u003e\n\u003c/table\u003e\u003c/markdown-accessiblity-table\u003e\n\u003cp dir=\"auto\"\u003e如果，我们想要计算出这天每个店铺一共卖了多少，我们通过 APIJSON 可以这样查询\u003c/p\u003e\n\u003cdiv class=\"snippet-clipboard-content notranslate position-relative overflow-auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;[]\u0026quot;: {\n      \u0026quot;Sale\u0026quot;:{\n        \u0026quot;@column\u0026quot;:\u0026quot;store_id;sum(amt):totAmt\u0026quot;, // 注意 SQL 函数要用分号 ; 隔开\n        \u0026quot;@group\u0026quot;:\u0026quot;store_id\u0026quot;\n      }\n  }\n}\"\u003e\u003cpre class=\"notranslate\"\u003e\u003ccode\u003e{\n  \"[]\": {\n      \"Sale\":{\n        \"@column\":\"store_id;sum(amt):totAmt\", // 注意 SQL 函数要用分号 ; 隔开\n        \"@group\":\"store_id\"\n      }\n  }\n}\n\u003c/code\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-4.登录\u003c/h4\u003e\u003ca id=\"user-content-c-1-4登录\" class=\"anchor\" aria-label=\"Permalink: C-1-4.登录\" href=\"#c-1-4登录\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果没有登录，由于权限的限制，是需要登录的。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e登录地址 \u003ccode\u003ehttp://localhost:8080/login\u003c/code\u003e 或 \u003ccode\u003ehttp://127.0.0.1:8080/login\u003c/code\u003e，发送请求\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n  \u0026quot;phone\u0026quot;: \u0026quot;13000038710\u0026quot;,\n  \u0026quot;password\u0026quot;:\u0026quot;apijson\u0026quot;\n}\"\u003e\u003cpre\u003e{\n  \u003cspan class=\"pl-ent\"\u003e\"phone\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e13000038710\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n  \u003cspan class=\"pl-ent\"\u003e\"password\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eapijson\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e账号和密码，可以到 \u003ccode\u003eapijson_privacy\u003c/code\u003e 里面查询\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-5.测试新增\u003c/h4\u003e\u003ca id=\"user-content-c-1-5测试新增\" class=\"anchor\" aria-label=\"Permalink: C-1-5.测试新增\" href=\"#c-1-5测试新增\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e接口地址：\u003ccode\u003ehttp://localhost:8080/post\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e我们想新增一条备注时，发送这样的请求\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e请求\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n \u0026quot;Moment\u0026quot;:{\n      \u0026quot;content\u0026quot;:\u0026quot;今天天气不错，到处都是提拉米苏雪\u0026quot;,\n      \u0026quot;userId\u0026quot;:38710\n },\n  \u0026quot;tag\u0026quot;:\u0026quot;Moment\u0026quot;\n}\"\u003e\u003cpre\u003e{\n \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n      \u003cspan class=\"pl-ent\"\u003e\"content\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e今天天气不错，到处都是提拉米苏雪\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e,\n      \u003cspan class=\"pl-ent\"\u003e\"userId\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e38710\u003c/span\u003e\n },\n  \u003cspan class=\"pl-ent\"\u003e\"tag\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eMoment\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ccode\u003etag\u003c/code\u003e 是我们在 \u003ccode\u003eRequest\u003c/code\u003e 表里面配置的 \u003ccode\u003etag\u003c/code\u003e 字段。\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e响应\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;Moment\u0026quot;: {\n        \u0026quot;code\u0026quot;: 200,\n        \u0026quot;count\u0026quot;: 1,\n        \u0026quot;id\u0026quot;: 1544520921923,\n        \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n    },\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n        \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"count\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1544520921923\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n    },\n    \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e返回的 \u003ccode\u003eid\u003c/code\u003e 是新增的数据的新主键值\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-4.测试修改\u003c/h4\u003e\u003ca id=\"user-content-c-1-4测试修改\" class=\"anchor\" aria-label=\"Permalink: C-1-4.测试修改\" href=\"#c-1-4测试修改\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e接口地址：\u003ccode\u003ehttp://localhost:8080/put\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e修改备注和新增类似\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e请求\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n \u0026quot;Moment\u0026quot;:{\n      \u0026quot;id\u0026quot;:1544520921923,\n      \u0026quot;content\u0026quot;:\u0026quot;海洋动物数量减少，如果非吃不可，不点杀也是在保护它们\u0026quot;\n },\n  \u0026quot;tag\u0026quot;:\u0026quot;Moment\u0026quot;\n}\"\u003e\u003cpre\u003e{\n \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n      \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e1544520921923\u003c/span\u003e,\n      \u003cspan class=\"pl-ent\"\u003e\"content\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e海洋动物数量减少，如果非吃不可，不点杀也是在保护它们\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n },\n  \u003cspan class=\"pl-ent\"\u003e\"tag\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eMoment\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e响应\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n    \u0026quot;Moment\u0026quot;: {\n        \u0026quot;code\u0026quot;: 200,\n        \u0026quot;count\u0026quot;: 1,\n        \u0026quot;id\u0026quot;: 1544520921923,\n        \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n    },\n    \u0026quot;code\u0026quot;: 200,\n    \u0026quot;msg\u0026quot;: \u0026quot;success\u0026quot;\n}\"\u003e\u003cpre\u003e{\n    \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e: {\n        \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"count\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e1544520921923\u003c/span\u003e,\n        \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n    },\n    \u003cspan class=\"pl-ent\"\u003e\"code\"\u003c/span\u003e: \u003cspan class=\"pl-c1\"\u003e200\u003c/span\u003e,\n    \u003cspan class=\"pl-ent\"\u003e\"msg\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003esuccess\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e如果要对 \u003ccode\u003ejson\u003c/code\u003e 类型操作的话，这样请求\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n \u0026quot;Moment\u0026quot;:{\n      \u0026quot;id\u0026quot;:1544520921923,\n      \u0026quot;praiseUserIdList+\u0026quot;: [123]\n },\n  \u0026quot;tag\u0026quot;:\u0026quot;Moment\u0026quot;\n}\"\u003e\u003cpre\u003e{\n \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n      \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e1544520921923\u003c/span\u003e,\n      \u003cspan class=\"pl-ent\"\u003e\"praiseUserIdList+\"\u003c/span\u003e: [\u003cspan class=\"pl-c1\"\u003e123\u003c/span\u003e]\n },\n  \u003cspan class=\"pl-ent\"\u003e\"tag\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eMoment\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e这里的 \u003ccode\u003epraiseUserIdList\u003c/code\u003e 是一个 \u003ccode\u003ejson\u003c/code\u003e 类型的字段，在操作之前它是空的 \u003ccode\u003e[]\u003c/code\u003e，提交以后它是 \u003ccode\u003e[123]\u003c/code\u003e，如果再添加一个 21，则会变成 \u003ccode\u003e[123,21]\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e要删除其中的值，把 \u003ccode\u003e+\u003c/code\u003e 变成 \u003ccode\u003e-\u003c/code\u003e 即可。如果没有 \u003ccode\u003e+\u003c/code\u003e, \u003ccode\u003e-\u003c/code\u003e 符号，\"praiseUserIdList\": [123] 将直接替换原本的值，可能丢失数据。\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-1-5.测试删除\u003c/h4\u003e\u003ca id=\"user-content-c-1-5测试删除\" class=\"anchor\" aria-label=\"Permalink: C-1-5.测试删除\" href=\"#c-1-5测试删除\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e接口地址：\u003ccode\u003ehttp://localhost:8080/delete\u003c/code\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e请求\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"{\n \u0026quot;Moment\u0026quot;:{\n      \u0026quot;id\u0026quot;:1544520921923\n },\n  \u0026quot;tag\u0026quot;:\u0026quot;Moment\u0026quot;\n}\"\u003e\u003cpre\u003e{\n \u003cspan class=\"pl-ent\"\u003e\"Moment\"\u003c/span\u003e:{\n      \u003cspan class=\"pl-ent\"\u003e\"id\"\u003c/span\u003e:\u003cspan class=\"pl-c1\"\u003e1544520921923\u003c/span\u003e\n },\n  \u003cspan class=\"pl-ent\"\u003e\"tag\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003eMoment\u003cspan class=\"pl-pds\"\u003e\"\u003c/span\u003e\u003c/span\u003e\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch3 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003eC-2.新增接口\u003c/h3\u003e\u003ca id=\"user-content-c-2新增接口\" class=\"anchor\" aria-label=\"Permalink: C-2.新增接口\" href=\"#c-2新增接口\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e1. 后台添加数据表\u003c/h4\u003e\u003ca id=\"user-content-1-后台添加数据表\" class=\"anchor\" aria-label=\"Permalink: 1. 后台添加数据表\" href=\"#1-后台添加数据表\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e在自己的数据库里新增一个表，比如我这里新增 \u003ccode\u003eb_stone\u003c/code\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-sql notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"-- 原石\nCREATE TABLE `b_stone` (\n  `id` bigint(20) NOT NULL AUTO_INCREMENT,\n  `cost` int(10) NULL COMMENT '成本',\n  `price` int(10) NULL COMMENT '卖价',\n  `length` int(10) NULL,\n  `width`  int(10) NULL,\n  `height` int(10) NULL,\n  `weight` float(8,1) NULL,\n  `creationdate` datetime default CURRENT_TIMESTAMP COMMENT '创建时间',\n  `modifydate` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',\n  `modifier` varchar(80) NULL,\n  PRIMARY KEY (`id`)\n) ENGINE=InnoDB DEFAULT CHARSET=utf8;\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e\u003cspan class=\"pl-c\"\u003e--\u003c/span\u003e 原石\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003eCREATE\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eTABLE\u003c/span\u003e `\u003cspan class=\"pl-en\"\u003eb_stone\u003c/span\u003e` (\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003eid\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003ebigint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e20\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNOT NULL\u003c/span\u003e AUTO_INCREMENT,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003ecost\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNULL\u003c/span\u003e COMMENT \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e成本\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003eprice\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNULL\u003c/span\u003e COMMENT \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e卖价\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003elength\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNULL\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003ewidth\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e  \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNULL\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003eheight\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eint\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e10\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNULL\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003eweight\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e float(\u003cspan class=\"pl-c1\"\u003e8\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNULL\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003ecreationdate\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e datetime default \u003cspan class=\"pl-c1\"\u003eCURRENT_TIMESTAMP\u003c/span\u003e COMMENT \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e创建时间\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003emodifydate\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003etimestamp\u003c/span\u003e DEFAULT \u003cspan class=\"pl-c1\"\u003eCURRENT_TIMESTAMP\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eON\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eUPDATE\u003c/span\u003e \u003cspan class=\"pl-c1\"\u003eCURRENT_TIMESTAMP\u003c/span\u003e COMMENT \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e修改时间\u003cspan class=\"pl-pds\"\u003e'\u003c/span\u003e\u003c/span\u003e,\n  \u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003emodifier\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e \u003cspan class=\"pl-k\"\u003evarchar\u003c/span\u003e(\u003cspan class=\"pl-c1\"\u003e80\u003c/span\u003e) \u003cspan class=\"pl-k\"\u003eNULL\u003c/span\u003e,\n  \u003cspan class=\"pl-k\"\u003ePRIMARY KEY\u003c/span\u003e (\u003cspan class=\"pl-s\"\u003e\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003eid\u003cspan class=\"pl-pds\"\u003e`\u003c/span\u003e\u003c/span\u003e)\n) ENGINE\u003cspan class=\"pl-k\"\u003e=\u003c/span\u003eInnoDB DEFAULT CHARSET\u003cspan class=\"pl-k\"\u003e=\u003c/span\u003eutf8;\u003c/pre\u003e\u003c/div\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2. 配置权限\u003c/h4\u003e\u003ca id=\"user-content-2-配置权限\" class=\"anchor\" aria-label=\"Permalink: 2. 配置权限\" href=\"#2-配置权限\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003eAPIJSON 3.7.0  版开始，依赖了 apijson-framework.jar 的不需要写任何代码：\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e2.1）在 Access 表里加一行记录即可\u003c/h5\u003e\u003ca id=\"user-content-21在-access-表里加一行记录即可\" class=\"anchor\" aria-label=\"Permalink: 2.1）在 Access 表里加一行记录即可\" href=\"#21在-access-表里加一行记录即可\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_access_config-small.jpg\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_access_config-small.jpg\" alt=\"\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\u003c/p\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cp dir=\"auto\"\u003e\u003cdel\u003e如果低于 3.7.0 或者未依赖 apijson-framework.jar，而是直接依赖 apijson-orm.jar，则需要编写代码：\u003c/del\u003e\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch5 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e\u003cdel\u003e2.1）在 Model 中添加对象并配置权限\u003c/del\u003e\u003c/h5\u003e\u003ca id=\"user-content-21在-model-中添加对象并配置权限\" class=\"anchor\" aria-label=\"Permalink: 2.1）在 Model 中添加对象并配置权限\" href=\"#21在-model-中添加对象并配置权限\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cdel\u003e项目的 model 目录下，新增一个类\u003c/del\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"package apijson.demo.server.model;\n\nimport zuo.biao.apijson.MethodAccess;\n\n@MethodAccess\npublic class Stone {\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003epackage\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003eapijson\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003edemo\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eserver\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003emodel\u003c/span\u003e;\n\n\u003cspan class=\"pl-k\"\u003eimport\u003c/span\u003e \u003cspan class=\"pl-s1\"\u003ezuo\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003ebiao\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eapijson\u003c/span\u003e.\u003cspan class=\"pl-s1\"\u003eMethodAccess\u003c/span\u003e;\n\n\u003cspan class=\"pl-c1\"\u003e@\u003c/span\u003e\u003cspan class=\"pl-c1\"\u003eMethodAccess\u003c/span\u003e\n\u003cspan class=\"pl-k\"\u003epublic\u003c/span\u003e \u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e \u003cspan class=\"pl-smi\"\u003eStone\u003c/span\u003e {\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cdel\u003e注解\u003ccode\u003e@MethodAccess\u003c/code\u003e的配置，可以参考其他类\u003c/del\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cdel\u003e由于我们的类名和数据库表名不一致，需要注册一下。如果一样就不需要了。\u003c/del\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cdel\u003e设置数据库的实际表名 \u003ccode\u003eDemoSQLConfig\u003c/code\u003e，38 行\u003c/del\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"//表名映射，隐藏真实表名，对安全要求很高的表可以这么做\n\tstatic {\n\t\tTABLE_KEY_MAP.put(User.class.getSimpleName(), \u0026quot;apijson_user\u0026quot;);\n\t\tTABLE_KEY_MAP.put(Privacy.class.getSimpleName(), \u0026quot;apijson_privacy\u0026quot;);\n\t\tTABLE_KEY_MAP.put(Stone.class.getSimpleName(), \u0026quot;b_stone\u0026quot;); // \u0026lt;--这一句\n\t}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-c\"\u003e//表名映射，隐藏真实表名，对安全要求很高的表可以这么做\u003c/span\u003e\n\t\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e {\n\t\t\u003cspan class=\"pl-c1\"\u003eTABLE_KEY_MAP\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eput\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eUser\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetSimpleName\u003c/span\u003e(), \u003cspan class=\"pl-s\"\u003e\"apijson_user\"\u003c/span\u003e);\n\t\t\u003cspan class=\"pl-c1\"\u003eTABLE_KEY_MAP\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eput\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003ePrivacy\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetSimpleName\u003c/span\u003e(), \u003cspan class=\"pl-s\"\u003e\"apijson_privacy\"\u003c/span\u003e);\n\t\t\u003cspan class=\"pl-c1\"\u003eTABLE_KEY_MAP\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eput\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eStone\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetSimpleName\u003c/span\u003e(), \u003cspan class=\"pl-s\"\u003e\"b_stone\"\u003c/span\u003e); \u003cspan class=\"pl-c\"\u003e// \u0026lt;--这一句\u003c/span\u003e\n\t}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003cdel\u003e注册权限是必须的，这样程序才能使用你配置的类权限去管理你的接口\u003c/del\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e\u003cdel\u003e脚本 \u003ccode\u003eDemoVerifier.java\u003c/code\u003e 的 48 行\u003c/del\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-java notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"static { //注册权限\n\t\tACCESS_MAP.put(User.class.getSimpleName(), getAccessMap(User.class.getAnnotation(MethodAccess.class)));\n....\n\t\tACCESS_MAP.put(Stone.class.getSimpleName(), getAccessMap(Stone.class.getAnnotation(MethodAccess.class)));\n\t}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-k\"\u003estatic\u003c/span\u003e { \u003cspan class=\"pl-c\"\u003e//注册权限\u003c/span\u003e\n\t\t\u003cspan class=\"pl-c1\"\u003eACCESS_MAP\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eput\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eUser\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetSimpleName\u003c/span\u003e(), \u003cspan class=\"pl-en\"\u003egetAccessMap\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eUser\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetAnnotation\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eMethodAccess\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e)));\n....\n\t\t\u003cspan class=\"pl-c1\"\u003eACCESS_MAP\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003eput\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eStone\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetSimpleName\u003c/span\u003e(), \u003cspan class=\"pl-en\"\u003egetAccessMap\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eStone\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e.\u003cspan class=\"pl-en\"\u003egetAnnotation\u003c/span\u003e(\u003cspan class=\"pl-smi\"\u003eMethodAccess\u003c/span\u003e.\u003cspan class=\"pl-k\"\u003eclass\u003c/span\u003e)));\n\t}\u003c/pre\u003e\u003c/div\u003e\n\u003cbr\u003e\n\u003cbr\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e3. 接口管理Request表的配置\u003c/h4\u003e\u003ca id=\"user-content-3-接口管理request表的配置\" class=\"anchor\" aria-label=\"Permalink: 3. 接口管理Request表的配置\" href=\"#3-接口管理request表的配置\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca target=\"_blank\" rel=\"noopener noreferrer nofollow\" href=\"https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_request_config-small.jpg\"\u003e\u003cimg src=\"https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_request_config-small.jpg\" alt=\"\" style=\"max-width: 100%;\"\u003e\u003c/a\u003e\n可这样设置 structure 字段来配置自动校验请求 JSON 参数： \u003cbr\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-json notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\u0026quot;VERIFY\u0026quot;:{\n  \u0026quot;type{}\u0026quot;:[0,1,2]\n}\"\u003e\u003cpre\u003e\u003cspan class=\"pl-ent\"\u003e\"VERIFY\"\u003c/span\u003e:{\n  \u003cspan class=\"pl-ent\"\u003e\"type{}\"\u003c/span\u003e:[\u003cspan class=\"pl-c1\"\u003e0\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e1\u003c/span\u003e,\u003cspan class=\"pl-c1\"\u003e2\u003c/span\u003e]\n}\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e就能校验 type 的值是不是 0，1，2 中的一个。\u003cbr\u003e\n还有 \u003cbr\u003e\u003c/p\u003e\n\u003cdiv class=\"highlight highlight-source-js notranslate position-relative overflow-auto\" dir=\"auto\" data-snippet-clipboard-copy-content=\"\u0026quot;VERIFY\u0026quot;: { \u0026quot;money\u0026amp;{}\u0026quot;:\u0026quot;\u0026gt;0,\u0026lt;=10000\u0026quot; }              //自动验证是否 money\u0026gt;0 \u0026amp; money\u0026lt;=10000\n\u0026quot;TYPE\u0026quot;: { \u0026quot;balance\u0026quot;: \u0026quot;DECIMAL\u0026quot; }                    //自动验证 balance 类型是否为 DECIMAL（对应 Double 双精度浮点数）\n\u0026quot;UNIQUE\u0026quot;: \u0026quot;phone\u0026quot;                                  //强制 phone 的值为数据库中没有的\n\u0026quot;NECESSARY\u0026quot;: \u0026quot;id,name\u0026quot;                             //强制传 id,name 两个字段\n\u0026quot;DISALLOW\u0026quot;: \u0026quot;balance\u0026quot;                              //禁止传 balance 字段\n\u0026quot;INSERT\u0026quot;: { \u0026quot;@role\u0026quot;: \u0026quot;OWNER\u0026quot; }                     //如果没传 @role 就自动添加\n\u0026quot;UPDATE\u0026quot;: { \u0026quot;id@\u0026quot;: \u0026quot;User/id\u0026quot; }                     //强制放入键值对\"\u003e\u003cpre\u003e\u003cspan class=\"pl-s\"\u003e\"VERIFY\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"money\u0026amp;{}\"\u003c/span\u003e:\u003cspan class=\"pl-s\"\u003e\"\u0026gt;0,\u0026lt;=10000\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e              \u003cspan class=\"pl-c\"\u003e//自动验证是否 money\u0026gt;0 \u0026amp; money\u0026lt;=10000\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"TYPE\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"balance\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"DECIMAL\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e                    \u003cspan class=\"pl-c\"\u003e//自动验证 balance 类型是否为 DECIMAL（对应 Double 双精度浮点数）\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"UNIQUE\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"phone\"\u003c/span\u003e                                  \u003cspan class=\"pl-c\"\u003e//强制 phone 的值为数据库中没有的\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"NECESSARY\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"id,name\"\u003c/span\u003e                             \u003cspan class=\"pl-c\"\u003e//强制传 id,name 两个字段\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"DISALLOW\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"balance\"\u003c/span\u003e                              \u003cspan class=\"pl-c\"\u003e//禁止传 balance 字段\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"INSERT\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"@role\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"OWNER\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e                     \u003cspan class=\"pl-c\"\u003e//如果没传 @role 就自动添加\u003c/span\u003e\n\u003cspan class=\"pl-s\"\u003e\"UPDATE\"\u003c/span\u003e: \u003cspan class=\"pl-kos\"\u003e{\u003c/span\u003e \u003cspan class=\"pl-s\"\u003e\"id@\"\u003c/span\u003e: \u003cspan class=\"pl-s\"\u003e\"User/id\"\u003c/span\u003e \u003cspan class=\"pl-kos\"\u003e}\u003c/span\u003e                     \u003cspan class=\"pl-c\"\u003e//强制放入键值对\u003c/span\u003e\u003c/pre\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e全部操作符见 \u003ca href=\"https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Operation.java\"\u003eOperation.java\u003c/a\u003e 的注释\n\u003cbr\u003e\n\u003cbr\u003e\u003c/p\u003e\n\u003cp dir=\"auto\"\u003e🌛此处的介绍都只是简要介绍，只是为了引导刚刚接触 APIJSON 的道友快速了解 APIJSON，并不代表 APIJSON 只有这些功能，具体功能详情参考下列图表\u003c/p\u003e\n\u003cdiv class=\"markdown-heading\" dir=\"auto\"\u003e\u003ch4 tabindex=\"-1\" class=\"heading-element\" dir=\"auto\"\u003e4. 完整功能图表\u003c/h4\u003e\u003ca id=\"user-content-4-完整功能图表\" class=\"anchor\" aria-label=\"Permalink: 4. 完整功能图表\" href=\"#4-完整功能图表\"\u003e\u003csvg data-component=\"Octicon\" class=\"octicon octicon-link\" viewBox=\"0 0 16 16\" version=\"1.1\" width=\"16\" height=\"16\" aria-hidden=\"true\"\u003e\u003cpath d=\"m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z\"\u003e\u003c/path\u003e\u003c/svg\u003e\u003c/a\u003e\u003c/div\u003e\n\u003cp dir=\"auto\"\u003e\u003ca href=\"https://github.com/Tencent/APIJSON/blob/master/Document.md#3\"\u003ehttps://github.com/Tencent/APIJSON/blob/master/Document.md#3\u003c/a\u003e\u003c/p\u003e\n\u003c/article\u003e","richTextTruncated":false,"renderedFileInfo":null,"symbols":{"timed_out":false,"not_analyzed":false,"symbols":[{"name":"APIJSON 入门教程","fully_qualified_name":"APIJSON 入门教程","kind":"section_1","ident_start":2,"ident_end":22,"extent_start":0,"extent_end":1944,"ident_utf16":{"start":{"line_number":0,"utf16_col":2},"end":{"line_number":0,"utf16_col":14}},"extent_utf16":{"start":{"line_number":0,"utf16_col":0},"end":{"line_number":40,"utf16_col":0}}},{"name":"A.介绍","fully_qualified_name":"A.介绍","kind":"section_2","ident_start":533,"ident_end":541,"extent_start":530,"extent_end":1944,"ident_utf16":{"start":{"line_number":12,"utf16_col":3},"end":{"line_number":12,"utf16_col":7}},"extent_utf16":{"start":{"line_number":12,"utf16_col":0},"end":{"line_number":40,"utf16_col":0}}},{"name":"A1.关于接口开发","fully_qualified_name":"A1.关于接口开发","kind":"section_3","ident_start":549,"ident_end":570,"extent_start":545,"extent_end":967,"ident_utf16":{"start":{"line_number":14,"utf16_col":4},"end":{"line_number":14,"utf16_col":13}},"extent_utf16":{"start":{"line_number":14,"utf16_col":0},"end":{"line_number":19,"utf16_col":0}}},{"name":"A2.功能说明","fully_qualified_name":"A2.功能说明","kind":"section_3","ident_start":971,"ident_end":986,"extent_start":967,"extent_end":1944,"ident_utf16":{"start":{"line_number":19,"utf16_col":4},"end":{"line_number":19,"utf16_col":11}},"extent_utf16":{"start":{"line_number":19,"utf16_col":0},"end":{"line_number":40,"utf16_col":0}}},{"name":"B.安装\u0026使用","fully_qualified_name":"B.安装\u0026使用","kind":"section_1","ident_start":1946,"ident_end":1961,"extent_start":1944,"extent_end":28607,"ident_utf16":{"start":{"line_number":40,"utf16_col":2},"end":{"line_number":40,"utf16_col":9}},"extent_utf16":{"start":{"line_number":40,"utf16_col":0},"end":{"line_number":969,"utf16_col":0}}},{"name":"B1.环境配置","fully_qualified_name":"B1.环境配置","kind":"section_2","ident_start":1968,"ident_end":1983,"extent_start":1965,"extent_end":2168,"ident_utf16":{"start":{"line_number":42,"utf16_col":3},"end":{"line_number":42,"utf16_col":10}},"extent_utf16":{"start":{"line_number":42,"utf16_col":0},"end":{"line_number":52,"utf16_col":0}}},{"name":"B2.下载项目","fully_qualified_name":"B2.下载项目","kind":"section_2","ident_start":2171,"ident_end":2186,"extent_start":2168,"extent_end":2431,"ident_utf16":{"start":{"line_number":52,"utf16_col":3},"end":{"line_number":52,"utf16_col":10}},"extent_utf16":{"start":{"line_number":52,"utf16_col":0},"end":{"line_number":62,"utf16_col":0}}},{"name":"B3.导入项目","fully_qualified_name":"B3.导入项目","kind":"section_2","ident_start":2434,"ident_end":2449,"extent_start":2431,"extent_end":3396,"ident_utf16":{"start":{"line_number":62,"utf16_col":3},"end":{"line_number":62,"utf16_col":10}},"extent_utf16":{"start":{"line_number":62,"utf16_col":0},"end":{"line_number":81,"utf16_col":0}}},{"name":"B4.错误修改","fully_qualified_name":"B4.错误修改","kind":"section_2","ident_start":3399,"ident_end":3414,"extent_start":3396,"extent_end":4675,"ident_utf16":{"start":{"line_number":81,"utf16_col":3},"end":{"line_number":81,"utf16_col":10}},"extent_utf16":{"start":{"line_number":81,"utf16_col":0},"end":{"line_number":107,"utf16_col":0}}},{"name":"C.开发说明","fully_qualified_name":"C.开发说明","kind":"section_2","ident_start":4678,"ident_end":4692,"extent_start":4675,"extent_end":28607,"ident_utf16":{"start":{"line_number":107,"utf16_col":3},"end":{"line_number":107,"utf16_col":9}},"extent_utf16":{"start":{"line_number":107,"utf16_col":0},"end":{"line_number":969,"utf16_col":0}}},{"name":"C-1.基于 MySQL 数据库的开发流程","fully_qualified_name":"C-1.基于 MySQL 数据库的开发流程","kind":"section_3","ident_start":4700,"ident_end":4741,"extent_start":4696,"extent_end":7348,"ident_utf16":{"start":{"line_number":109,"utf16_col":4},"end":{"line_number":109,"utf16_col":25}},"extent_utf16":{"start":{"line_number":109,"utf16_col":0},"end":{"line_number":170,"utf16_col":0}}},{"name":"C-1-1.修改数据库链接","fully_qualified_name":"C-1-1.修改数据库链接","kind":"section_4","ident_start":4751,"ident_end":4778,"extent_start":4745,"extent_end":6719,"ident_utf16":{"start":{"line_number":111,"utf16_col":6},"end":{"line_number":111,"utf16_col":19}},"extent_utf16":{"start":{"line_number":111,"utf16_col":0},"end":{"line_number":158,"utf16_col":0}}},{"name":"C-1-2.导入表","fully_qualified_name":"C-1-2.导入表","kind":"section_4","ident_start":6724,"ident_end":6739,"extent_start":6719,"extent_end":7348,"ident_utf16":{"start":{"line_number":158,"utf16_col":5},"end":{"line_number":158,"utf16_col":14}},"extent_utf16":{"start":{"line_number":158,"utf16_col":0},"end":{"line_number":170,"utf16_col":0}}},{"name":"C-1-2-1.更多测试用例","fully_qualified_name":"C-1-2-1.更多测试用例","kind":"section_3","ident_start":7352,"ident_end":7378,"extent_start":7348,"extent_end":24699,"ident_utf16":{"start":{"line_number":170,"utf16_col":4},"end":{"line_number":170,"utf16_col":18}},"extent_utf16":{"start":{"line_number":170,"utf16_col":0},"end":{"line_number":855,"utf16_col":0}}},{"name":"C-1-3.测试查询","fully_qualified_name":"C-1-3.测试查询","kind":"section_4","ident_start":7927,"ident_end":7945,"extent_start":7922,"extent_end":22586,"ident_utf16":{"start":{"line_number":182,"utf16_col":5},"end":{"line_number":182,"utf16_col":15}},"extent_utf16":{"start":{"line_number":182,"utf16_col":0},"end":{"line_number":739,"utf16_col":0}}},{"name":"字段过滤","fully_qualified_name":"字段过滤","kind":"section_5","ident_start":9242,"ident_end":9254,"extent_start":9236,"extent_end":9707,"ident_utf16":{"start":{"line_number":232,"utf16_col":6},"end":{"line_number":232,"utf16_col":10}},"extent_utf16":{"start":{"line_number":232,"utf16_col":0},"end":{"line_number":263,"utf16_col":0}}},{"name":"字段别名","fully_qualified_name":"字段别名","kind":"section_5","ident_start":9713,"ident_end":9725,"extent_start":9707,"extent_end":10065,"ident_utf16":{"start":{"line_number":263,"utf16_col":6},"end":{"line_number":263,"utf16_col":10}},"extent_utf16":{"start":{"line_number":263,"utf16_col":0},"end":{"line_number":281,"utf16_col":0}}},{"name":"逻辑运算","fully_qualified_name":"逻辑运算","kind":"section_5","ident_start":10071,"ident_end":10083,"extent_start":10065,"extent_end":11859,"ident_utf16":{"start":{"line_number":281,"utf16_col":6},"end":{"line_number":281,"utf16_col":10}},"extent_utf16":{"start":{"line_number":281,"utf16_col":0},"end":{"line_number":369,"utf16_col":0}}},{"name":"模糊查询","fully_qualified_name":"模糊查询","kind":"section_5","ident_start":11865,"ident_end":11877,"extent_start":11859,"extent_end":12472,"ident_utf16":{"start":{"line_number":369,"utf16_col":6},"end":{"line_number":369,"utf16_col":10}},"extent_utf16":{"start":{"line_number":369,"utf16_col":0},"end":{"line_number":396,"utf16_col":0}}},{"name":"正则匹配","fully_qualified_name":"正则匹配","kind":"section_5","ident_start":12478,"ident_end":12490,"extent_start":12472,"extent_end":14323,"ident_utf16":{"start":{"line_number":396,"utf16_col":6},"end":{"line_number":396,"utf16_col":10}},"extent_utf16":{"start":{"line_number":396,"utf16_col":0},"end":{"line_number":426,"utf16_col":0}}},{"name":"列表数据","fully_qualified_name":"列表数据","kind":"section_5","ident_start":14329,"ident_end":14341,"extent_start":14323,"extent_end":16648,"ident_utf16":{"start":{"line_number":426,"utf16_col":6},"end":{"line_number":426,"utf16_col":10}},"extent_utf16":{"start":{"line_number":426,"utf16_col":0},"end":{"line_number":520,"utf16_col":0}}},{"name":"分页","fully_qualified_name":"分页","kind":"section_5","ident_start":16654,"ident_end":16660,"extent_start":16648,"extent_end":18453,"ident_utf16":{"start":{"line_number":520,"utf16_col":6},"end":{"line_number":520,"utf16_col":8}},"extent_utf16":{"start":{"line_number":520,"utf16_col":0},"end":{"line_number":597,"utf16_col":0}}},{"name":"排序","fully_qualified_name":"排序","kind":"section_5","ident_start":18459,"ident_end":18465,"extent_start":18453,"extent_end":18906,"ident_utf16":{"start":{"line_number":597,"utf16_col":6},"end":{"line_number":597,"utf16_col":8}},"extent_utf16":{"start":{"line_number":597,"utf16_col":0},"end":{"line_number":615,"utf16_col":0}}},{"name":"关联查询","fully_qualified_name":"关联查询","kind":"section_5","ident_start":18912,"ident_end":18924,"extent_start":18906,"extent_end":20906,"ident_utf16":{"start":{"line_number":615,"utf16_col":6},"end":{"line_number":615,"utf16_col":10}},"extent_utf16":{"start":{"line_number":615,"utf16_col":0},"end":{"line_number":674,"utf16_col":0}}},{"name":"分组查询","fully_qualified_name":"分组查询","kind":"section_5","ident_start":20912,"ident_end":20924,"extent_start":20906,"extent_end":22586,"ident_utf16":{"start":{"line_number":674,"utf16_col":6},"end":{"line_number":674,"utf16_col":10}},"extent_utf16":{"start":{"line_number":674,"utf16_col":0},"end":{"line_number":739,"utf16_col":0}}},{"name":"C-1-4.登录","fully_qualified_name":"C-1-4.登录","kind":"section_4","ident_start":22591,"ident_end":22603,"extent_start":22586,"extent_end":22907,"ident_utf16":{"start":{"line_number":739,"utf16_col":5},"end":{"line_number":739,"utf16_col":13}},"extent_utf16":{"start":{"line_number":739,"utf16_col":0},"end":{"line_number":754,"utf16_col":0}}},{"name":"C-1-5.测试新增","fully_qualified_name":"C-1-5.测试新增","kind":"section_4","ident_start":22912,"ident_end":22930,"extent_start":22907,"extent_end":23513,"ident_utf16":{"start":{"line_number":754,"utf16_col":5},"end":{"line_number":754,"utf16_col":15}},"extent_utf16":{"start":{"line_number":754,"utf16_col":0},"end":{"line_number":791,"utf16_col":0}}},{"name":"C-1-4.测试修改","fully_qualified_name":"C-1-4.测试修改","kind":"section_4","ident_start":23518,"ident_end":23536,"extent_start":23513,"extent_end":24529,"ident_utf16":{"start":{"line_number":791,"utf16_col":5},"end":{"line_number":791,"utf16_col":15}},"extent_utf16":{"start":{"line_number":791,"utf16_col":0},"end":{"line_number":840,"utf16_col":0}}},{"name":"C-1-5.测试删除","fully_qualified_name":"C-1-5.测试删除","kind":"section_4","ident_start":24534,"ident_end":24552,"extent_start":24529,"extent_end":24699,"ident_utf16":{"start":{"line_number":840,"utf16_col":5},"end":{"line_number":840,"utf16_col":15}},"extent_utf16":{"start":{"line_number":840,"utf16_col":0},"end":{"line_number":855,"utf16_col":0}}},{"name":"C-2.新增接口","fully_qualified_name":"C-2.新增接口","kind":"section_3","ident_start":24703,"ident_end":24719,"extent_start":24699,"extent_end":28607,"ident_utf16":{"start":{"line_number":855,"utf16_col":4},"end":{"line_number":855,"utf16_col":12}},"extent_utf16":{"start":{"line_number":855,"utf16_col":0},"end":{"line_number":969,"utf16_col":0}}},{"name":"1. 后台添加数据表","fully_qualified_name":"1. 后台添加数据表","kind":"section_4","ident_start":24728,"ident_end":24752,"extent_start":24723,"extent_end":25393,"ident_utf16":{"start":{"line_number":857,"utf16_col":5},"end":{"line_number":857,"utf16_col":15}},"extent_utf16":{"start":{"line_number":857,"utf16_col":0},"end":{"line_number":878,"utf16_col":0}}},{"name":"2. 配置权限","fully_qualified_name":"2. 配置权限","kind":"section_4","ident_start":25398,"ident_end":25413,"extent_start":25393,"extent_end":27080,"ident_utf16":{"start":{"line_number":878,"utf16_col":5},"end":{"line_number":878,"utf16_col":12}},"extent_utf16":{"start":{"line_number":878,"utf16_col":0},"end":{"line_number":939,"utf16_col":0}}},{"name":"2.1）在 Access 表里加一行记录即可","fully_qualified_name":"2.1）在 Access 表里加一行记录即可","kind":"section_5","ident_start":25518,"ident_end":25562,"extent_start":25512,"extent_end":25831,"ident_utf16":{"start":{"line_number":882,"utf16_col":6},"end":{"line_number":882,"utf16_col":28}},"extent_utf16":{"start":{"line_number":882,"utf16_col":0},"end":{"line_number":891,"utf16_col":0}}},{"name":"~~2.1）在 Model 中添加对象并配置权限~~","fully_qualified_name":"~~2.1）在 Model 中添加对象并配置权限~~","kind":"section_5","ident_start":25837,"ident_end":25887,"extent_start":25831,"extent_end":27080,"ident_utf16":{"start":{"line_number":891,"utf16_col":6},"end":{"line_number":891,"utf16_col":32}},"extent_utf16":{"start":{"line_number":891,"utf16_col":0},"end":{"line_number":939,"utf16_col":0}}},{"name":"3. 接口管理Request表的配置","fully_qualified_name":"3. 接口管理Request表的配置","kind":"section_4","ident_start":27085,"ident_end":27119,"extent_start":27080,"extent_end":28513,"ident_utf16":{"start":{"line_number":939,"utf16_col":5},"end":{"line_number":939,"utf16_col":23}},"extent_utf16":{"start":{"line_number":939,"utf16_col":0},"end":{"line_number":965,"utf16_col":0}}},{"name":"4. 完整功能图表","fully_qualified_name":"4. 完整功能图表","kind":"section_4","ident_start":28518,"ident_end":28539,"extent_start":28513,"extent_end":28607,"ident_utf16":{"start":{"line_number":965,"utf16_col":5},"end":{"line_number":965,"utf16_col":14}},"extent_utf16":{"start":{"line_number":965,"utf16_col":0},"end":{"line_number":969,"utf16_col":0}}}]}},"codeViewLayoutRoute":{"repo":{"id":641347055,"defaultBranch":"master","name":"APIJSON","ownerLogin":"JunDaTang","currentUserCanPush":false,"isFork":true,"isEmpty":false,"createdAt":"2023-05-16T09:30:35.000Z","ownerAvatar":"https://avatars.githubusercontent.com/u/15319232?v=4","public":true,"private":false,"isOrgOwned":false,"isArchived":false},"currentUser":null,"uploadToken":"uMG5kqgzSuq0SuP4AmUh2NFRAY5fzEtKnwv_Vyj_7QhcbbkLidfOF0E04D8D5yPffO6IhjNEZmWFLL1lbhtjiQ","allShortcutsEnabled":false,"treeExpanded":true,"path":"详细的说明文档.md","symbolsExpanded":false,"refInfo":{"name":"master","listCacheKey":"v0:1684229444.397782","canEdit":false,"currentOid":"f3ab196afd558476e39bc0f231c9dae63f580e74"},"helpUrl":"https://docs.github.com","githubDevUrl":null},"codeViewFileTreeLayoutRoute":{"fileTree":{"":{"items":[{"name":".github","path":".github","contentType":"directory"},{"name":"APIJSONORM","path":"APIJSONORM","contentType":"directory"},{"name":"assets","path":"assets","contentType":"directory"},{"name":".gitignore","path":".gitignore","contentType":"file"},{"name":"APIJSON初期构思及实现.docx","path":"APIJSON初期构思及实现.docx","contentType":"file"},{"name":"APIJSON初期构思及实现.pages","path":"APIJSON初期构思及实现.pages","contentType":"file"},{"name":"CONTRIBUTING.md","path":"CONTRIBUTING.md","contentType":"file"},{"name":"CONTRIBUTING_COMMIT.md","path":"CONTRIBUTING_COMMIT.md","contentType":"file"},{"name":"Document-English.md","path":"Document-English.md","contentType":"file"},{"name":"Document.md","path":"Document.md","contentType":"file"},{"name":"LICENSE","path":"LICENSE","contentType":"file"},{"name":"Navigation.md","path":"Navigation.md","contentType":"file"},{"name":"README-English.md","path":"README-English.md","contentType":"file"},{"name":"README-extend.md","path":"README-extend.md","contentType":"file"},{"name":"README.md","path":"README.md","contentType":"file"},{"name":"Roadmap.md","path":"Roadmap.md","contentType":"file"},{"name":"logo.png","path":"logo.png","contentType":"file"},{"name":"详细的说明文档.md","path":"详细的说明文档.md","contentType":"file"}],"totalCount":18}},"fileTreeProcessingTime":36.561673000000006,"foldersToFetch":[]},"codeViewBlobLayoutRoute":{"codeLineWrapEnabled":false,"refInfo":{"name":"master","listCacheKey":"v0:1684229444.397782","canEdit":false,"refType":"branch","currentOid":"f3ab196afd558476e39bc0f231c9dae63f580e74","canEditOnDefaultBranch":false,"fileExistsOnDefault":true},"path":"详细的说明文档.md","blob":{"copilotSWEAgentEnabled":false,"dependabotInfo":{"showConfigurationBanner":false,"configFilePath":null,"networkDependabotPath":"/JunDaTang/APIJSON/network/updates","dismissConfigurationNoticePath":"/settings/dismiss-notice/dependabot_configuration_notice","configurationNoticeDismissed":null},"displayName":"详细的说明文档.md","displayUrl":"https://github.com/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md?raw=true","headerInfo":{"blobSize":"27.9 KB","deleteTooltip":"You must be signed in to make or propose changes","editTooltip":"You must be signed in to make or propose changes","ghDesktopPath":"https://desktop.github.com","isGitLfs":false,"onBranch":true,"shortPath":"827fab3","siteNavLoginPath":"/login?return_to=https%3A%2F%2Fgithub.com%2FJunDaTang%2FAPIJSON%2Fblob%2Fmaster%2F%25E8%25AF%25A6%25E7%25BB%2586%25E7%259A%2584%25E8%25AF%25B4%25E6%2598%258E%25E6%2596%2587%25E6%25A1%25A3.md","isCSV":false,"isRichtext":true,"lineInfo":{"truncatedLoc":"969","truncatedSloc":"702"},"mode":"file"},"image":false,"isCodeownersFile":null,"isPlain":false,"isValidLegacyIssueTemplate":false,"isIssueTemplate":false,"isDiscussionTemplate":false,"language":"Markdown","languageID":222,"large":false,"planSupportInfo":{"repoIsFork":null,"repoOwnedByCurrentUser":null,"requestFullPath":"/JunDaTang/APIJSON/blob/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md","showFreeOrgGatedFeatureMessage":null,"showPlanSupportBanner":null,"upgradeDataAttributes":null,"upgradePath":null},"publishBannersInfo":{"dismissActionNoticePath":"/settings/dismiss-notice/publish_action_from_dockerfile","releasePath":"/JunDaTang/APIJSON/releases/new?marketplace=true","showPublishActionBanner":false},"rawBlobUrl":"https://github.com/JunDaTang/APIJSON/raw/refs/heads/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md","renderImageOrRaw":false,"shortPath":null,"symbolsEnabled":true,"tabSize":4,"topBannersInfo":{"overridingGlobalFundingFile":false,"globalPreferredFundingPath":null,"showInvalidCitationWarning":false,"citationHelpUrl":"https://docs.github.com/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files","actionsOnboardingTip":null},"truncated":false,"viewable":true,"workflowRedirectUrl":null},"copilotInfo":null,"copilotAccessAllowed":false,"copilotSpacesEnabled":false,"modelsAccessAllowed":false,"modelsRepoIntegrationEnabled":false,"isMarketplaceEnabled":true},"codeViewBlobLayoutRoute.StyledBlob":{"rawLines":["# APIJSON 入门教程\r","\r","可以先看更清晰直观的视频教程 \u003cbr \u003e\r","https://search.bilibili.com/all?keyword=APIJSON\r","![image](https://user-images.githubusercontent.com/5738175/135413311-0207ec13-f7ea-4767-9e34-1a6d08438295.png)\r","\r","本文档已部署到官网，浏览和检索体验更好，但官网更新滞后，如有疏漏以本文档为准 \u003cbr \u003e\r","http://apijson.cn/doc/zh/\r","\r","其它各种官方和第三方文档见首页相关推荐 \u003cbr \u003e\r","https://github.com/Tencent/APIJSON#%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90\r","\r","## A.介绍\r","\r","### A1.关于接口开发\r","\r","首先是看名字 `APIJSON`，API 是说这个项目是属于接口开发的项目，JSON 是指传输数据格式是 JSON 格式。介于各位看官的水平高低不齐，这里就先为没有项目经验朋友啰嗦两句接口开发的内容。有经验的朋友可以跳到 `A2` 继续查看。完整的详细介绍见项目首页 \u003cbr \u003e\r","https://github.com/Tencent/APIJSON#--apijson\r","\r","### A2.功能说明\r","\r","一个接口的开发，比如 Java 用 SpringBoot + Mybatis 来开发一般来说就像下面这个流程\r","\r","![1545468341131](assets/1545468341131.png)\r","\r","部署上这个项目后，流程变成了这样\r","\r","![1545468361962](assets/1545468361962.png)\r","\r","如果使用 [apijson-framework](https://github.com/APIJSON/apijson-framework)，还可进一步简化流程\r","\r","![1543975563776](https://raw.githubusercontent.com/Tencent/APIJSON/master/assets/1543975563776.png)\r","\r","\r","换句话说，使用这个项目作为后端的支持的话，是不需要对每个表写增删改查等接口的，只需在该项目连接的数据里进行表的创建，以及配置接口权限即可。无需进行过多的开发，哪怕是要改结构也仅仅只需要修改表字段而已。想想仅仅是部署一个后端项目，现在需要写的接口就基本写好了，直接调用就行了，是不是挺爽的。\r","\r","说这么多，咱们直接开干吧！\r","\r","\r","\r","# B.安装\u0026使用\r","\r","## B1.环境配置\r","\r","JDK: 1.8+\r","\r","MAVEN: 3.0+\r","\r","MySQL 5.7+ / PostgreSQL 9.5+ / Oracle 12C+ / ClickHouse 21.1+ / Presto 0.277+ / Hive 3.1.2+ / ...\r","\r","IntelliJ IDEA 2018+ / Eclipse Java EE IDE 4.5.1+\r","\r","## B2.下载项目\r","\r","```git\r","git clone https://github.com/APIJSON/APIJSON-Demo.git\r","```\r","\r","或者，直接下载 ZIP 打包好的项目文件。\r","\r","![image](https://user-images.githubusercontent.com/5738175/135412855-574cae7b-402c-4fe0-9959-711e580799af.png)\r","\r","## B3.导入项目\r","\r","Eclipse 导入：\r","\r","顶部菜单 File \u003e Import \u003e Maven \u003e Existing Maven Projects \u003e Next \u003e Browse\r","\r","选择项目所在目录 [/APIJSON-Demo-Master/APIJSON-Java-Server](https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server)/APIJSONBoot\r","\r","当报依赖错误的时候，将同目录下的 libs 里面的 jar 包添加到 Build Path 中。\r","![1542345887787](assets/1542345887787.png)\r","\r","为了方便修改源代码，你可以像我一样不添加 libs/APIJSON.jar 文件到 Build Path 中。而是将 libs/APIJSON.jar 的源码，复制到当前项目里，然后添加到 Build Path 中。\r","\r","源代码在 [APIJSON-Master/APIJSON-Java-Server](https://github.com/Tencent/APIJSON)/APIJSONORM。\r","\r","IntelliJ IDEA 导入具体见：\r","\r","https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#3%E7%94%A8-intellij-idea-ultimate-%E6%88%96-eclipse-for-javaee-%E8%BF%90%E8%A1%8C%E5%90%8E%E7%AB%AF%E5%B7%A5%E7%A8%8B\r","\r","## B4.错误修改\r","\r","有可能 pom.xml 会报错，例如：\r","\r","```java\r","\u003cproject xmlns=\"http://maven.apache.org/POM/4.0.0\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\r","\txsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\r","```\r","\r","这段代码中的这一句提示错误：\r","\r","```java\r","xsi:schemaLocation=\"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd\"\u003e\r","```\r","\r","修改步骤：\r","\r","- 请修改 Eclipse 中的 Maven 镜像地址，以便更快下载或者更新，具体方法自行百度；\r","- 打开 Eclipse-\u003eWindows-\u003ePreferences-\u003eMaven-\u003eInstallations-\u003eAdd 这个按钮用于指定 Maven 的安装目录。这里不建议使用 Eclipse 自带的，需要再自己设置。最终效果如下图所示：\r","  ![install3](https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install3.png)\r","- 打开 Eclipse-\u003eWindows-\u003ePreferences-\u003eMaven-\u003eUser Settings 这是指定 setting.xml 的位置，同时导向自己的本地 maven 仓库。最终效果如下图所示：\r","  ![install4](https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install4.png)\r","\r","以上截图仅为示例，实际路径请以自己设定为准。\r","\r","\r","## C.开发说明\r","\r","### C-1.基于 MySQL 数据库的开发流程\r","\r","####  C-1-1.修改数据库链接\r","\r","如我的数据库信息是这样的\r","\r","| 数据库参数 | 值                  |\r","| ---------- | ------------------- |\r","| 地址       | localhost:3306 |\r","| 用户       | root                |\r","| 密码       | apijson                |\r","| 数据库     | sys                |\r","\r","那么需要在 `DemoSQLConfig` 配置数据库\r","\r","```java\r","\tstatic {\r","\t\tDEFAULT_DATABASE = DATABASE_MYSQL;  // TODO 默认数据库类型，改成你自己的\r","\t\tDEFAULT_SCHEMA = \"sys\";  // TODO 默认数据库名/模式，改成你自己的，默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle: \r","\t}\r","\t\r","\t@Override\r","\tpublic String getDBVersion() {\r","\t\treturn \"5.7.22\";  // \"8.0.11\";  // TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号  // MYSQL 8 和 7 使用的 JDBC 配置不一样\r","\t}\r","\t\r","\t@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息\r","\t@Override\r","\tpublic String getDBUri() {\r","\t\t// 这个是 MySQL 8.0 及以上，要加 userSSL=false  return \"jdbc:mysql://localhost:3306?userSSL=false\u0026serverTimezone=GMT%2B8\u0026useUnicode=true\u0026characterEncoding=UTF-8\";\r","\t\t// 以下是 MySQL 5.7 及以下\r","\t\treturn \"jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8\u0026useUnicode=true\u0026characterEncoding=UTF-8\"; //TODO 改成你自己的，TiDB 可以当成 MySQL 使用，默认端口为 4000\r","\t}\r","\t\r","\t@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息\r","\t@Override\r","\tpublic String getDBAccount() {\r","\t\treturn \"root\";  // TODO 改成你自己的\r","\t}\r","\t\r","\t@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息\r","\t@Override\r","\tpublic String getDBPassword() {\r","\t\treturn \"apijson\";  // TODO 改成你自己的，TiDB 可以当成 MySQL 使用， 默认密码为空字符串 \"\"\r","\t}\r","```\r","具体见源码 \u003cbr \u003e\r","https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoSQLConfig.java\r","\r","#### C-1-2.导入表\r","\r","在 [APIJSON-Demo-Master/MySQL](https://github.com/APIJSON/APIJSON-Demo/tree/master/MySQL) 目录下有一批 SQL 脚本，他们看起来是这样的\r","\r","![1542345654422](assets/1542345654422.png)\r","\r","MySQLWorkbench/Datagrip/Navicat 导入表具体见：\r","\r","https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#2%E5%AF%BC%E5%85%A5%E8%A1%A8%E6%96%87%E4%BB%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93\r","\r","导入完成之后。我们可以把项目跑起来看下，以刚刚配置的项目，项目是否能够连上数据库。其中也有一些初始化数据，可以方便我们测试。\r","\r","### C-1-2-1.更多测试用例\r","\r","如果需要更多测试用例，请按照以下步骤获取：\r","1. 用 Chrome(或 Firefox 等)浏览器中打开 http://apijson.cn/api ，或者 http://apijson.cn 然后点击按钮 \\[接口 APIAuto 测试] 也行；\r","2. 点击右上角的“登录”按钮登录；\r","3. 点击“测试账号”按钮左边第二个按钮，（也就是“-”左边的第一个）获取各种测试用例；\r","4. 欢迎大家踊跃共享自己的测试用例；\r","\r","也可以参考 APIAuto 的文档或视频：\r","\r","https://github.com/TommyLemon/APIAuto\r","\r","#### C-1-3.测试查询\r","\r","为了方便测试，我这里使用的 Chrome 浏览器的 Restlet Client 插件，大家可以根据自己的喜好使用不同的工具测试。\r","\r","使用 `http://localhost:8080/get` 测试结果。（请注意 DemoApplication.java 中使用 Tomcat 默认的 8080 端口，如果不小心开着PC端的“微信”，8080 端口会被占用，建议改成 8081, 9090 等其它应用程序未占用的端口。）\r","\r","随便找一个表，比如 `Moment` 表，我们取其中 id 为 12 的一条出来看看\r","\r","![1542350018926](assets/1542350018926.png)\r","\r","对接口地址 `http://localhost:8080/get` 发送一个 JSON 格式的请求\r","\r","![1542350219020](assets/1542350219020.png)\r","\r","请求的JSON:\r","\r","```json\r","{\r","  \"Moment\": {\r","    \"id\":12\r","  }\r","}\r","```\r","\r","响应的JSON：\r","\r","```json\r","{\r","    \"Moment\": {\r","        \"content\": \"1111534034\",\r","        \"date\": \"2017-02-08 16:06:11.0\",\r","        \"id\": 12,\r","        \"pictureList\": [\r","            \"http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg\",\r","            \"http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg\"\r","        ],\r","        \"praiseUserIdList\": [\r","            70793,\r","            93793,\r","            82001\r","        ],\r","        \"userId\": 70793\r","    },\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","\r","\r","##### 字段过滤\r","\r","这里这么多字段，如果我只想要这个 `content` 字段的信息怎么办？\r","\r","你可以这样请求：\r","\r","```json\r","{\r","  \"Moment\": {\r","    \"id\":12,\r","    \"@column\":\"content\"\r","  }\r","}\r","```\r","\r","响应：\r","\r","```json\r","{\r","    \"Moment\": {\r","        \"content\": \"1111534034\"\r","    },\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","`@column` 表示你要筛选出的字段，如果是多个字段可以这样写 `\"@column\":\"id,date,content\"`\r","\r","\r","\r","##### 字段别名\r","\r","如果想要使用字段的别名应该这样写：`\"@column\":\"id,date:time,content:text\"`\r","\r","```json\r","{\r","    \"Moment\": {\r","        \"text\": \"1111534034\",\r","        \"time\": \"2017-02-08 16:06:11.0\",\r","        \"id\": 12\r","    }\r","}\r","```\r","\r","这样在返回的数据中 `date` 字段就变成了 `time`, `content` 字段变成了 `text`。\r","\r","\r","\r","##### 逻辑运算\r","\r","如果想要筛选出，id 在 `12,15,32` 中的这三条数据的`日期`和`内容`怎么办呢？\r","\r","请求：\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"id{}\":[12,15,32],\r","        \"@column\":\"id,date,content\"\r","      }\r","  }\r","}\r","```\r","\r","响应：\r","\r","```json\r","{\r","    \"[]\": [\r","        {\r","            \"Moment\": {\r","                \"content\": \"1111534034\",\r","                \"date\": \"2017-02-08 16:06:11.0\",\r","                \"id\": 12\r","            }\r","        },\r","        {\r","            \"Moment\": {\r","                \"content\": \"APIJSON is a JSON Transmission Structure Protocol…\",\r","                \"date\": \"2017-02-08 16:06:11.0\",\r","                \"id\": 15\r","            }\r","        },\r","        {\r","            \"Moment\": {\r","                \"date\": \"2017-02-08 16:06:11.0\",\r","                \"id\": 32\r","            }\r","        }\r","    ],\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","\r","\r","如果所要筛选的数据的是在一定范围内的，比如 id 是 300 到 400 之间的\r","\r","你可以这样过滤 `\"id\u0026{}\":\"\u003e=300,\u003c=400\"`\r","\r","\u0026的作用是表明后面的两个过滤条件的逻辑关系\r","\r","```sql\r","(id \u003e= 300 AND id \u003c= 500)\r","```\r","\r","\r","\r","现在的逻辑符号一共有三种，`\u0026`，`|`，`!`\r","\r","默认的逻辑关系是 `|`，也就是说 `\"id|{}\":\"\u003c=300,\u003e=400\"` 和 `\"id{}\":\"\u003c=300,\u003e=400\"` 等价。\r","\r","`!`主要用于反选，黑名单之类的\r","\r","`\"id!{}\":[12,15,32]` 表示 `id` 不在 12，15，32 内的其他数据。\r","\r","复杂一些，如果多个条件相互组合，可以写多个关于id的过滤条件\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"id\u0026{}\":\"\u003e=10,\u003c=40\",\r","        \"id!{}\":[12],\r","        \"@column\":\"id,date,content:text\"\r","      }\r","  }\r","}\r","```\r","\r","比如这里表示 id 在 10 到 40 之间，但是却不包含 12 的数据。\r","\r","\r","\r","##### 模糊查询\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"content$\":\"%APIJSON%\",\r","        \"@column\":\"id,date,content:text\"\r","      }\r","  }\r","}\r","```\r","\r","使用方式有多种：\r","\r","`keyword%`，以 `keyword` 开头的字符串。\r","\r","`%keyword`，以 `keyword` 结束的字符串。\r","\r","`%keyword%`，包含 `keyword` 的字符串，如：`keyword123`, `123keyword`, `123keyword123`\r","\r","`%k%e%y%`，包含字母 `k`, `e`, `y` 的字符串\r","\r","还有几种比较便捷的方式，我们这里如果使用 `\"content~\":\"keyword\"` 来代替 `\"content$\":\"%keyword%\"`，同样可以表示包含某字符串\r","\r","\r","\r","##### 正则匹配\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"content~\":\"^[0-9]+$\",\r","        \"@column\":\"id,date,content:text\"\r","      }\r","  }\r","}\r","```\r","\r","正则表达式 `^[0-9]+$`，查询 `content` 为纯数字的数据，[MySQL 的正则语法](http://www.runoob.com/mysql/mysql-regexp.html) 如下：\r","\r","| 模式       | 描述                                                         |\r","| ---------- | ------------------------------------------------------------ |\r","| ^          | 匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\\n' 或 '\\r' 之后的位置。 |\r","| $          | 匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\\n' 或 '\\r' 之前的位置。 |\r","| .          | 匹配除 \"\\n\" 之外的任何单个字符。要匹配包括 '\\n' 在内的任何字符，请使用象 '[.\\n]' 的模式。 |\r","| [...]      | 字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 \"plain\" 中的 'a'。 |\r","| [^...]     | 负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 \"plain\" 中的'p'。 |\r","| p1\\|p2\\|p3 | 匹配 p1 或 p2 或 p3。例如，'z\\|food' 能匹配 \"z\" 或 \"food\"。'(z\\|f)ood' 则匹配 \"zood\" 或 \"food\"。 |\r","| *          | 匹配前面的子表达式零次或多次。例如，zo* 能匹配 \"z\" 以及 \"zoo\"。* 等价于{0,}。 |\r","| +          | 匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 \"zo\" 以及 \"zoo\"，但不能匹配 \"z\"。+ 等价于 {1,}。 |\r","| {n}        | n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 \"Bob\" 中的 'o'，但是能匹配 \"food\" 中的两个 o。 |\r","| {n,m}      | m 和 n 均为非负整数，其中n \u003c= m。最少匹配 n 次且最多匹配 m 次。 |\r","\r","\r","\r","##### 列表数据\r","\r","之前我们看到返回的数据是这样的\r","\r","```json\r","{\r","    \"Moment\": {\r","        \"content\": \"1111534034\",\r","        \"date\": \"2017-02-08 16:06:11.0\",\r","        \"id\": 12,\r","        \"pictureList\": [\r","            \"http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg\",\r","            \"http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg\"\r","        ],\r","        \"praiseUserIdList\": [\r","            70793,\r","            93793,\r","            82001\r","        ],\r","        \"userId\": 70793\r","    },\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","里面的 `pictureList` 和 `praiseUserIdList` 是数组，这种数据在 MySQL 数据库中是 JSON 数据格式的。\r","\r","![1542357146401](assets/1542357146401.png)\r","\r","数据库里存储的值是这样的\r","\r","![1542357265371](assets/1542357265371.png)\r","\r","如果我们想过滤出里面有 `82001` 的数据，我们应该这样请求\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"praiseUserIdList\u003c\u003e\":82001,\r","        \"@column\":\"id,date,content,praiseUserIdList\"\r","      }\r","  }\r","}\r","```\r","\r","结果是类似这样的，为了显示方便剔除了一些数据。\r","\r","```js\r","{\r","    \"[]\": [ // JavaScript/TypeScript/Python 中可用 data[\"[]\"] 来提取不符合变量名格式的 key 对应的 value，Java 等可以用 data.getJSONArray(\"[]\") 等。\r","        \r","        {\r","            \"Moment\": {\r","                \"date\": \"2017-02-08 16:06:11.0\",\r","                \"id\": 32,\r","                \"praiseUserIdList\": [\r","                    38710,\r","                    82002,\r","                    82001\r","                ]\r","            }\r","        },\r","        {\r","            \"Moment\": {\r","                \"content\": \"This is a Content...-435\",\r","                \"date\": \"2017-02-01 19:14:31.0\",\r","                \"id\": 58,\r","                \"praiseUserIdList\": [\r","                    38710,\r","                    82003,\r","                    82001\r","                ]\r","            }\r","        },\r","        {\r","            \"Moment\": {\r","                \"content\": \"https://gss2.bdstatic.com/-fo3dSag_xIb.jpg\",\r","                \"date\": \"2018-10-27 17:58:02.0\",\r","                \"id\": 1540634282433,\r","                \"praiseUserIdList\": [\r","                    82001\r","                ]\r","            }\r","        }\r","    ],\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","\r","\r","##### 分页\r","\r","对于数量太多的数据，我们很多时候都需要分页操作，这时候我们可以用类似下面这样的请求\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"@column\":\"id,date,content,praiseUserIdList\"\r","      },\r","    \"page\": 0,\r","    \"count\": 5\r","  }\r","}\r","```\r","\r","请注意，这里的 `page` 和 `count` 是放在 `[] `内的属性，而不是 `Moment` 对象里。这里 `count` 表示每页的数量，`page` 表示第几页，页数从 0 开始算。\r","\r","也许你想看看这个请求对应的SQL语句\r","\r","```sql\r","SELECT `id`,`date`,`content`,`praiseUserIdList` FROM `sys`.`Moment` LIMIT 5 OFFSET 0\r","```\r","\r","这里`sys`是我自己的`schema`的名字，你的可能会有所不同。\r","\r","如果不想分页的，也提供了一套特殊的查询方式。这种查询方式有三种，请求方式类型这样\r","\r","```js\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"@column\":\"id,date,content,praiseUserIdList\"\r","      },\r","      \"query\": 2\r","  },\r","  \"total@\":\"/[]/total\" // key 里的 total 可改成 num 等几乎任意其它名称，还可以用 \"info@\": \"/[]/info\" 获取更详细的分页信息\r","}\r","```\r","\r","这里因为 `query` 的值是 2，所有会同时查询 `Moment` 表中的数据和总数。如果是 1 的话，则只会返回当前表的总数：\r","\r","```json\r","{\"total\":59,\"code\":200,\"msg\":\"success\"}\r","```\r","\r","\r","\r","数据库中的数量：\r","\r","![1544515879364](assets/1544515879364.png)\r","\r","\r","\r","当然，如果你添加了过滤条件，返回的数量就会是你所过滤的数量，比如：\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"@column\":\"id,date,content,praiseUserIdList\",\r","        \"praiseUserIdList\u003c\u003e\":38710\r","      },\r","      \"query\": 1\r","  },\r","  \"total@\":\"/[]/total\"\r","}\r","```\r","\r","返回：\r","\r","```json\r","{\"total\":12,\"code\":200,\"msg\":\"success\"}\r","```\r","\r","\r","\r","##### 排序\r","\r","要使用排序的话，这样操作\r","\r","```json\r","{\r","  \"[]\": {\r","      \"Moment\":{\r","        \"@column\":\"id,date,content,praiseUserIdList\",\r","        \"praiseUserIdList\u003c\u003e\":38710,\r","        \"@order\":\"date-,id,content+\"\r","      }\r","  }\r","}\r","```\r","\r","`\"@order\": \"date-,id,content+\"` 其中，字段的前后顺序表示字段排序的优先级。`id` 和 `id+` 是等价的，默认就是升序排列。`date-` 表示将 `date` 字段降序排列。\r","\r","##### 关联查询\r","\r","在讲解关联查询的时候，我们需要先了解下表之间的关系\r","\r","现在有两张表 Moment 和 User，两张表的关系是下面这样\r","\r","![1545468294295](assets/1545468294295.png)\r","\r","MOMENT表示动态，类似微信朋友圈、QQ 空间的动态，每一条动态会有一个发表动态的用户 User，所以 Moment 表里会有一个和 User 表的外键关联：Moment.userId = User.id。\r","\r","对于这样的数据关系，我们在查询动态时，很多时候我们会连带着用户一起查处来，这样又如何操作呢\r","\r","```js\r","{\r","  \"[]\": {\r","    \"Moment\":{\r","        \"@column\":\"id,date,userId\",\r","        \"id\":12 // 注意 id 是主键，这个数组最多返回 1 条子项（如果 id=12 的表记录存在）\r","    },\r","    \"User\":{\r","      \"id@\":\"/Moment/userId\", // 不要求物理外键，只要能关联即可\r","      \"@column\":\"id,name\"\r","    }\r","  }\r","}\r","```\r","\r","这个请求稍微复杂点，首先我们用 `[]` 对象表示我们是想查询出一个列表，这个列表包含两个部分 `Moment` 和 `User`。\r","\r","其中 `Moment` 是我们想要查询的主要内容，它的写法也和一般查询数据时无异。\r","\r","`User` 是与 `Moment` 相关联的数据，所以查询的时候我们需要用 `id@` 来表示他们之间的关联关系\r","\r","`/Moment/userId` 中，最开始的 `/` 相当于是指明了 `[]` 的位置，`/Moment` 表示 `[]` 对象下的 `Moemnt` 对象，`/Moment/userId` 表示 `Moment` 的 `userId` 字段是与 `User` 的 `id` 关联的。这是一种缺省引用路径，这里等价于完整引用路径 `[]/Moment/userId`。\r","\r","响应的数据：\r","\r","```json\r","{\r","    \"[]\": [\r","        {\r","            \"Moment\": {\r","                \"date\": \"2017-02-08 16:06:11.0\",\r","                \"id\": 12,\r","                \"userId\": 70793\r","            },\r","            \"User\": {\r","                \"id\": 70793,\r","                \"name\": \"Strong\"\r","            }\r","        }\r","    ],\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","\r","\r","##### 分组查询\r","\r","在了解分组查询之前，我们需要先了解下 APIJSON 所支持的部分常见函数：\r","\r","| 函数名 | 说明                       |\r","| ------ | -------------------------- |\r","| count  | 统计分组下，某字段的个数   |\r","| sum    | 统计分组下，某字段的和     |\r","| max    | 统计分组下，某字段的最大值 |\r","| min    | 统计分组下，某字段的最小值 |\r","| avg    | 统计分组下，某字段的平均值 |\r","\r","具体见 AbstractSQLConfig 中 SQL_FUNCTION_MAP 配置的所有 SQL 函数 ：\r","\r","https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L286-L765\r","\r","比如，如果只是单纯的查出最大值，这样请求就可以了\r","\r","```json\r","{\r","  \"Moment\":{\r","     \"@column\":\"max(id):maxid\"\r","  }\r","}\r","```\r","\r","响应：\r","\r","```json\r","{\r","  \"Moment\": {\r","     \"maxid\": 1541912160047\r","  },\r","  \"code\": 200,\r","  \"msg\": \"success\"\r","}\r","```\r","\r","这里 `maxid` 是我们取的别名\r","\r","如果是有分组条件的，那我们需要使用 `@group`\r","\r","比如，像下面 Sale 表，这张表表示，2018年1月1日某公司门下的 3 个店铺（store_id）的营业额（amt）数据\r","\r","| id   | store_id | amt  |\r","| ---- | -------- | ---- |\r","| 1    | 1        | 100  |\r","| 2    | 1        | 80   |\r","| 3    | 2        | 30   |\r","| 4    | 2        | 100  |\r","| 5    | 3        | 210  |\r","\r","如果，我们想要计算出这天每个店铺一共卖了多少，我们通过 APIJSON 可以这样查询\r","\r","```\r","{\r","  \"[]\": {\r","      \"Sale\":{\r","        \"@column\":\"store_id;sum(amt):totAmt\", // 注意 SQL 函数要用分号 ; 隔开\r","        \"@group\":\"store_id\"\r","      }\r","  }\r","}\r","```\r","\r","#### C-1-4.登录\r","\r","如果没有登录，由于权限的限制，是需要登录的。\r","\r","登录地址 `http://localhost:8080/login` 或 `http://127.0.0.1:8080/login`，发送请求\r","\r","```json\r","{\r","  \"phone\": \"13000038710\",\r","  \"password\":\"apijson\"\r","}\r","```\r","\r","账号和密码，可以到 `apijson_privacy` 里面查询\r","\r","#### C-1-5.测试新增\r","\r","接口地址：`http://localhost:8080/post`\r","\r","我们想新增一条备注时，发送这样的请求\r","\r","请求\r","\r","```json\r","{\r"," \"Moment\":{\r","      \"content\":\"今天天气不错，到处都是提拉米苏雪\",\r","      \"userId\":38710\r"," },\r","  \"tag\":\"Moment\"\r","}\r","```\r","\r","`tag` 是我们在 `Request` 表里面配置的 `tag` 字段。\r","\r","响应\r","\r","```json\r","{\r","    \"Moment\": {\r","        \"code\": 200,\r","        \"count\": 1,\r","        \"id\": 1544520921923,\r","        \"msg\": \"success\"\r","    },\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","返回的 `id` 是新增的数据的新主键值\r","\r","#### C-1-4.测试修改\r","\r","接口地址：`http://localhost:8080/put`\r","\r","修改备注和新增类似\r","\r","请求\r","\r","```json\r","{\r"," \"Moment\":{\r","      \"id\":1544520921923,\r","      \"content\":\"海洋动物数量减少，如果非吃不可，不点杀也是在保护它们\"\r"," },\r","  \"tag\":\"Moment\"\r","}\r","```\r","\r","响应\r","\r","```json\r","{\r","    \"Moment\": {\r","        \"code\": 200,\r","        \"count\": 1,\r","        \"id\": 1544520921923,\r","        \"msg\": \"success\"\r","    },\r","    \"code\": 200,\r","    \"msg\": \"success\"\r","}\r","```\r","\r","如果要对 `json` 类型操作的话，这样请求\r","\r","```json\r","{\r"," \"Moment\":{\r","      \"id\":1544520921923,\r","      \"praiseUserIdList+\": [123]\r"," },\r","  \"tag\":\"Moment\"\r","}\r","```\r","\r","这里的 `praiseUserIdList` 是一个 `json` 类型的字段，在操作之前它是空的 `[]`，提交以后它是 `[123]`，如果再添加一个 21，则会变成 `[123,21]`\r","\r","要删除其中的值，把 `+` 变成 `-` 即可。如果没有 `+`, `-` 符号，\"praiseUserIdList\": \\[123] 将直接替换原本的值，可能丢失数据。\r","\r","#### C-1-5.测试删除\r","\r","接口地址：`http://localhost:8080/delete`\r","\r","请求\r","\r","```json\r","{\r"," \"Moment\":{\r","      \"id\":1544520921923\r"," },\r","  \"tag\":\"Moment\"\r","}\r","```\r","\r","### C-2.新增接口\r","\r","#### 1. 后台添加数据表\r","\r","在自己的数据库里新增一个表，比如我这里新增 `b_stone`\r","\r","```sql\r","-- 原石\r","CREATE TABLE `b_stone` (\r","  `id` bigint(20) NOT NULL AUTO_INCREMENT,\r","  `cost` int(10) NULL COMMENT '成本',\r","  `price` int(10) NULL COMMENT '卖价',\r","  `length` int(10) NULL,\r","  `width`  int(10) NULL,\r","  `height` int(10) NULL,\r","  `weight` float(8,1) NULL,\r","  `creationdate` datetime default CURRENT_TIMESTAMP COMMENT '创建时间',\r","  `modifydate` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',\r","  `modifier` varchar(80) NULL,\r","  PRIMARY KEY (`id`)\r",") ENGINE=InnoDB DEFAULT CHARSET=utf8;\r","```\r","\r","#### 2. 配置权限\r","\r","APIJSON 3.7.0  版开始，依赖了 apijson-framework.jar 的不需要写任何代码：\r","\r","##### 2.1）在 Access 表里加一行记录即可\r","\r","![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_access_config-small.jpg) \r","\r","\u003cbr /\u003e\r","\u003cbr /\u003e\r","\r","~~如果低于 3.7.0 或者未依赖 apijson-framework.jar，而是直接依赖 apijson-orm.jar，则需要编写代码：~~\r","\r","##### ~~2.1）在 Model 中添加对象并配置权限~~\r","\r","~~项目的 model 目录下，新增一个类~~\r","\r","```java\r","package apijson.demo.server.model;\r","\r","import zuo.biao.apijson.MethodAccess;\r","\r","@MethodAccess\r","public class Stone {\r","}\r","```\r","\r","~~注解`@MethodAccess`的配置，可以参考其他类~~\r","\r","\r","\r","~~由于我们的类名和数据库表名不一致，需要注册一下。如果一样就不需要了。~~\r","\r","~~设置数据库的实际表名 `DemoSQLConfig`，38 行~~\r","\r","```java\r","//表名映射，隐藏真实表名，对安全要求很高的表可以这么做\r","\tstatic {\r","\t\tTABLE_KEY_MAP.put(User.class.getSimpleName(), \"apijson_user\");\r","\t\tTABLE_KEY_MAP.put(Privacy.class.getSimpleName(), \"apijson_privacy\");\r","\t\tTABLE_KEY_MAP.put(Stone.class.getSimpleName(), \"b_stone\"); // \u003c--这一句\r","\t}\r","```\r","\r","\r","\r","~~注册权限是必须的，这样程序才能使用你配置的类权限去管理你的接口~~\r","\r","~~脚本 `DemoVerifier.java` 的 48 行~~\r","\r","```java\r","static { //注册权限\r","\t\tACCESS_MAP.put(User.class.getSimpleName(), getAccessMap(User.class.getAnnotation(MethodAccess.class)));\r","....\r","\t\tACCESS_MAP.put(Stone.class.getSimpleName(), getAccessMap(Stone.class.getAnnotation(MethodAccess.class)));\r","\t}\r","```\r","\r","\u003cbr /\u003e\r","\u003cbr /\u003e\r","\r","#### 3. 接口管理Request表的配置\r","![](https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_request_config-small.jpg) \r","可这样设置 structure 字段来配置自动校验请求 JSON 参数： \u003cbr /\u003e\r","```json\r","\"VERIFY\":{\r","  \"type{}\":[0,1,2]\r","}\r","```\r","就能校验 type 的值是不是 0，1，2 中的一个。\u003cbr /\u003e\r","还有 \u003cbr /\u003e\r","```js\r","\"VERIFY\": { \"money\u0026{}\":\"\u003e0,\u003c=10000\" }              //自动验证是否 money\u003e0 \u0026 money\u003c=10000\r","\"TYPE\": { \"balance\": \"DECIMAL\" }                    //自动验证 balance 类型是否为 DECIMAL（对应 Double 双精度浮点数）\r","\"UNIQUE\": \"phone\"                                  //强制 phone 的值为数据库中没有的\r","\"NECESSARY\": \"id,name\"                             //强制传 id,name 两个字段\r","\"DISALLOW\": \"balance\"                              //禁止传 balance 字段\r","\"INSERT\": { \"@role\": \"OWNER\" }                     //如果没传 @role 就自动添加\r","\"UPDATE\": { \"id@\": \"User/id\" }                     //强制放入键值对\r","```\r","全部操作符见 [Operation.java](https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Operation.java) 的注释\r","\u003cbr /\u003e\r","\u003cbr /\u003e\r","\r","\r",":first_quarter_moon_with_face:此处的介绍都只是简要介绍，只是为了引导刚刚接触 APIJSON 的道友快速了解 APIJSON，并不代表 APIJSON 只有这些功能，具体功能详情参考下列图表\r","\r","#### 4. 完整功能图表\r","https://github.com/Tencent/APIJSON/blob/master/Document.md#3\r","\r","\r"],"stylingDirectives":[[[0,14,"pl-mh"],[2,14,"pl-en"]],[],[[16,18,"pl-ent"]],[[0,47,"pl-corl"]],[[0,2,"pl-s"],[7,8,"pl-s"],[8,9,"pl-s"],[9,109,"pl-corl"],[109,110,"pl-s"]],[],[[40,42,"pl-ent"]],[[0,25,"pl-corl"]],[],[[21,23,"pl-ent"]],[[0,71,"pl-corl"]],[],[[0,7,"pl-mh"],[3,7,"pl-en"]],[],[[0,13,"pl-mh"],[4,13,"pl-en"]],[],[[7,8,"pl-s"],[8,15,"pl-c1"],[15,16,"pl-s"],[111,112,"pl-s"],[112,114,"pl-c1"],[114,115,"pl-s"],[135,137,"pl-ent"]],[[0,44,"pl-corl"]],[],[[0,11,"pl-mh"],[4,11,"pl-en"]],[],[],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[[5,6,"pl-s"],[23,24,"pl-s"],[24,25,"pl-s"],[25,69,"pl-corl"],[69,70,"pl-s"]],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,98,"pl-corl"],[98,99,"pl-s"]],[],[],[],[],[],[],[],[],[[0,9,"pl-mh"],[2,9,"pl-en"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[],[],[],[],[],[],[],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[[0,3,"pl-s"],[3,6,"pl-en"],[6,6,"pl-c1"]],[[0,53,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[],[],[[0,2,"pl-s"],[7,8,"pl-s"],[8,9,"pl-s"],[9,109,"pl-corl"],[109,110,"pl-s"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[],[],[],[],[[9,10,"pl-s"],[50,51,"pl-s"],[51,52,"pl-s"],[52,123,"pl-corl"],[123,124,"pl-s"]],[],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[],[],[[5,6,"pl-s"],[40,41,"pl-s"],[41,42,"pl-s"],[42,76,"pl-corl"],[76,77,"pl-s"]],[],[],[],[[0,189,"pl-corl"]],[],[[0,10,"pl-mh"],[3,10,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,1,"pl-k"],[14,15,"pl-k"],[15,50,"pl-s"],[15,16,"pl-pds"],[49,50,"pl-pds"],[56,57,"pl-k"],[60,61,"pl-k"],[61,104,"pl-s"],[61,62,"pl-pds"],[103,104,"pl-pds"]],[[4,5,"pl-k"],[19,20,"pl-k"],[20,99,"pl-s"],[20,21,"pl-pds"],[98,99,"pl-pds"],[99,100,"pl-k"]],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[3,4,"pl-k"],[18,19,"pl-k"],[19,98,"pl-s"],[19,20,"pl-pds"],[97,98,"pl-pds"],[98,99,"pl-k"]],[[0,3,"pl-s"]],[],[],[],[[0,1,"pl-v"]],[[0,1,"pl-v"]],[[2,4,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,116,"pl-corl"],[116,117,"pl-s"]],[[0,1,"pl-v"]],[[2,4,"pl-s"],[12,13,"pl-s"],[13,14,"pl-s"],[14,116,"pl-corl"],[116,117,"pl-s"]],[],[],[],[],[[0,9,"pl-mh"],[3,9,"pl-en"]],[],[[0,25,"pl-mh"],[4,25,"pl-en"]],[],[[0,19,"pl-mh"],[6,19,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[8,9,"pl-ml"],[29,30,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[35,36,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[28,29,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[33,34,"pl-ml"]],[[0,1,"pl-ml"],[11,12,"pl-ml"],[36,37,"pl-ml"]],[[0,1,"pl-ml"],[10,11,"pl-ml"],[31,32,"pl-ml"]],[],[[6,7,"pl-s"],[7,20,"pl-c1"],[20,21,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[1,7,"pl-k"]],[[2,18,"pl-c1"],[19,20,"pl-k"],[21,35,"pl-c1"],[38,60,"pl-c"],[38,40,"pl-c"]],[[2,16,"pl-c1"],[17,18,"pl-k"],[19,24,"pl-s"],[19,20,"pl-pds"],[23,24,"pl-pds"],[27,115,"pl-c"],[27,29,"pl-c"]],[],[],[[1,10,"pl-k"]],[[1,7,"pl-k"],[8,14,"pl-smi"]],[[2,8,"pl-k"],[9,17,"pl-s"],[9,10,"pl-pds"],[16,17,"pl-pds"],[20,105,"pl-c"],[20,22,"pl-c"]],[],[],[[1,11,"pl-k"],[12,21,"pl-c1"],[22,23,"pl-k"],[24,29,"pl-c1"],[32,53,"pl-c"],[32,34,"pl-c"]],[[1,10,"pl-k"]],[[1,7,"pl-k"],[8,14,"pl-smi"]],[[2,155,"pl-c"],[2,4,"pl-c"]],[[2,22,"pl-c"],[2,4,"pl-c"]],[[2,8,"pl-k"],[9,101,"pl-s"],[9,10,"pl-pds"],[100,101,"pl-pds"],[103,146,"pl-c"],[103,105,"pl-c"]],[],[],[[1,11,"pl-k"],[12,21,"pl-c1"],[22,23,"pl-k"],[24,29,"pl-c1"],[32,53,"pl-c"],[32,34,"pl-c"]],[[1,10,"pl-k"]],[[1,7,"pl-k"],[8,14,"pl-smi"]],[[2,8,"pl-k"],[9,15,"pl-s"],[9,10,"pl-pds"],[14,15,"pl-pds"],[18,32,"pl-c"],[18,20,"pl-c"]],[],[],[[1,11,"pl-k"],[12,21,"pl-c1"],[22,23,"pl-k"],[24,29,"pl-c1"],[32,53,"pl-c"],[32,34,"pl-c"]],[[1,10,"pl-k"]],[[1,7,"pl-k"],[8,14,"pl-smi"]],[[2,8,"pl-k"],[9,18,"pl-s"],[9,10,"pl-pds"],[17,18,"pl-pds"],[21,68,"pl-c"],[21,23,"pl-c"]],[],[[0,3,"pl-s"]],[[7,9,"pl-ent"]],[[0,129,"pl-corl"]],[],[[0,14,"pl-mh"],[5,14,"pl-en"]],[],[[2,3,"pl-s"],[28,29,"pl-s"],[29,30,"pl-s"],[30,87,"pl-corl"],[87,88,"pl-s"]],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[],[],[[0,154,"pl-corl"]],[],[],[],[[0,18,"pl-mh"],[4,18,"pl-en"]],[],[],[[0,1,"pl-s"],[1,2,"pl-v"],[31,52,"pl-corl"],[57,74,"pl-corl"],[82,84,"pl-c1"],[97,98,"pl-s"]],[[0,1,"pl-s"],[1,2,"pl-v"]],[[0,1,"pl-s"],[1,2,"pl-v"]],[[0,1,"pl-s"],[1,2,"pl-v"]],[],[],[],[[0,37,"pl-corl"]],[],[[0,15,"pl-mh"],[5,15,"pl-en"]],[],[],[],[[3,4,"pl-s"],[4,29,"pl-c1"],[29,30,"pl-s"]],[],[[10,11,"pl-s"],[11,17,"pl-c1"],[17,18,"pl-s"]],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[[6,7,"pl-s"],[7,32,"pl-c1"],[32,33,"pl-s"]],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,10,"pl-ent"]],[[4,8,"pl-ent"],[9,11,"pl-c1"]],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,12,"pl-ent"]],[[8,17,"pl-ent"],[19,31,"pl-s"],[19,20,"pl-pds"],[30,31,"pl-pds"]],[[8,14,"pl-ent"],[16,39,"pl-s"],[16,17,"pl-pds"],[38,39,"pl-pds"]],[[8,12,"pl-ent"],[14,16,"pl-c1"]],[[8,21,"pl-ent"]],[[12,76,"pl-s"],[12,13,"pl-pds"],[75,76,"pl-pds"]],[[12,76,"pl-s"],[12,13,"pl-pds"],[75,76,"pl-pds"]],[],[[8,26,"pl-ent"]],[[12,17,"pl-c1"]],[[12,17,"pl-c1"]],[[12,17,"pl-c1"]],[],[[8,16,"pl-ent"],[18,23,"pl-c1"]],[],[[4,10,"pl-ent"],[12,15,"pl-c1"]],[[4,9,"pl-ent"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[[17,18,"pl-s"],[18,25,"pl-c1"],[25,26,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,10,"pl-ent"]],[[4,8,"pl-ent"],[9,11,"pl-c1"]],[[4,13,"pl-ent"],[14,23,"pl-s"],[14,15,"pl-pds"],[22,23,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,12,"pl-ent"]],[[8,17,"pl-ent"],[19,31,"pl-s"],[19,20,"pl-pds"],[30,31,"pl-pds"]],[],[[4,10,"pl-ent"],[12,15,"pl-c1"]],[[4,9,"pl-ent"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[0,1,"pl-s"],[1,8,"pl-c1"],[8,9,"pl-s"],[34,35,"pl-s"],[35,62,"pl-c1"],[62,63,"pl-s"]],[],[],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[[17,18,"pl-s"],[18,55,"pl-c1"],[55,56,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,12,"pl-ent"]],[[8,14,"pl-ent"],[16,28,"pl-s"],[16,17,"pl-pds"],[27,28,"pl-pds"]],[[8,14,"pl-ent"],[16,39,"pl-s"],[16,17,"pl-pds"],[38,39,"pl-pds"]],[[8,12,"pl-ent"],[14,16,"pl-c1"]],[],[],[[0,3,"pl-s"]],[],[[10,11,"pl-s"],[11,15,"pl-c1"],[15,16,"pl-s"],[24,25,"pl-s"],[25,29,"pl-c1"],[29,30,"pl-s"],[32,33,"pl-s"],[33,40,"pl-c1"],[40,41,"pl-s"],[48,49,"pl-s"],[49,53,"pl-c1"],[53,54,"pl-s"]],[],[],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[[13,14,"pl-s"],[14,22,"pl-c1"],[22,23,"pl-s"],[32,33,"pl-s"],[33,35,"pl-c1"],[35,36,"pl-s"],[37,38,"pl-s"],[38,40,"pl-c1"],[40,41,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,14,"pl-ent"],[16,18,"pl-c1"],[19,21,"pl-c1"],[22,24,"pl-c1"]],[[8,17,"pl-ent"],[18,35,"pl-s"],[18,19,"pl-pds"],[34,35,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,8,"pl-ent"]],[],[[12,20,"pl-ent"]],[[16,25,"pl-ent"],[27,39,"pl-s"],[27,28,"pl-pds"],[38,39,"pl-pds"]],[[16,22,"pl-ent"],[24,47,"pl-s"],[24,25,"pl-pds"],[46,47,"pl-pds"]],[[16,20,"pl-ent"],[22,24,"pl-c1"]],[],[],[],[[12,20,"pl-ent"]],[[16,25,"pl-ent"],[27,79,"pl-s"],[27,28,"pl-pds"],[78,79,"pl-pds"]],[[16,22,"pl-ent"],[24,47,"pl-s"],[24,25,"pl-pds"],[46,47,"pl-pds"]],[[16,20,"pl-ent"],[22,24,"pl-c1"]],[],[],[],[[12,20,"pl-ent"]],[[16,22,"pl-ent"],[24,47,"pl-s"],[24,25,"pl-pds"],[46,47,"pl-pds"]],[[16,20,"pl-ent"],[22,24,"pl-c1"]],[],[],[],[[4,10,"pl-ent"],[12,15,"pl-c1"]],[[4,9,"pl-ent"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[],[],[[8,9,"pl-s"],[9,30,"pl-c1"],[30,31,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[4,6,"pl-k"],[7,10,"pl-c1"],[11,14,"pl-k"],[18,20,"pl-k"],[21,24,"pl-c1"]],[[0,3,"pl-s"]],[],[],[],[[13,14,"pl-s"],[14,15,"pl-c1"],[15,16,"pl-s"],[17,18,"pl-s"],[18,19,"pl-c1"],[19,20,"pl-s"],[21,22,"pl-s"],[22,23,"pl-c1"],[23,24,"pl-s"]],[],[[9,10,"pl-s"],[10,11,"pl-c1"],[11,12,"pl-s"],[18,19,"pl-s"],[19,40,"pl-c1"],[40,41,"pl-s"],[44,45,"pl-s"],[45,65,"pl-c1"],[65,66,"pl-s"]],[],[[0,1,"pl-s"],[1,2,"pl-c1"],[2,3,"pl-s"]],[],[[0,1,"pl-s"],[1,19,"pl-c1"],[19,20,"pl-s"],[24,25,"pl-s"],[25,27,"pl-c1"],[27,28,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,15,"pl-ent"],[16,27,"pl-s"],[16,17,"pl-pds"],[26,27,"pl-pds"]],[[8,15,"pl-ent"],[17,19,"pl-c1"]],[[8,17,"pl-ent"],[18,40,"pl-s"],[18,19,"pl-pds"],[39,40,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[],[],[],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,18,"pl-ent"],[19,30,"pl-s"],[19,20,"pl-pds"],[29,30,"pl-pds"]],[[8,17,"pl-ent"],[18,40,"pl-s"],[18,19,"pl-pds"],[39,40,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[],[],[[0,1,"pl-s"],[1,9,"pl-c1"],[9,10,"pl-s"],[13,14,"pl-s"],[14,21,"pl-c1"],[21,22,"pl-s"]],[],[[0,1,"pl-s"],[1,9,"pl-c1"],[9,10,"pl-s"],[13,14,"pl-s"],[14,21,"pl-c1"],[21,22,"pl-s"]],[],[[0,1,"pl-s"],[1,10,"pl-c1"],[10,11,"pl-s"],[15,16,"pl-s"],[16,23,"pl-c1"],[23,24,"pl-s"],[32,33,"pl-s"],[33,43,"pl-c1"],[43,44,"pl-s"],[46,47,"pl-s"],[47,57,"pl-c1"],[57,58,"pl-s"],[60,61,"pl-s"],[61,74,"pl-c1"],[74,75,"pl-s"]],[],[[0,1,"pl-s"],[1,8,"pl-c1"],[8,9,"pl-s"],[15,16,"pl-s"],[16,17,"pl-c1"],[17,18,"pl-s"],[20,21,"pl-s"],[21,22,"pl-c1"],[22,23,"pl-s"],[25,26,"pl-s"],[26,27,"pl-c1"],[27,28,"pl-s"]],[],[[21,22,"pl-s"],[22,42,"pl-c1"],[42,43,"pl-s"],[48,49,"pl-s"],[49,71,"pl-c1"],[71,72,"pl-s"]],[],[],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,18,"pl-ent"],[19,29,"pl-s"],[19,20,"pl-pds"],[28,29,"pl-pds"]],[[8,17,"pl-ent"],[18,40,"pl-s"],[18,19,"pl-pds"],[39,40,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[[6,7,"pl-s"],[7,15,"pl-c1"],[15,16,"pl-s"],[20,21,"pl-s"],[21,28,"pl-c1"],[28,29,"pl-s"],[38,39,"pl-s"],[50,51,"pl-s"],[51,52,"pl-s"],[52,97,"pl-corl"],[97,98,"pl-s"]],[],[[0,1,"pl-ml"],[11,12,"pl-ml"],[72,73,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[76,77,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[83,84,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[82,83,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[59,60,"pl-s"],[63,64,"pl-s"],[71,72,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[6,7,"pl-s"],[13,14,"pl-ml"],[38,39,"pl-s"],[42,43,"pl-s"],[66,67,"pl-ml"]],[[0,1,"pl-ml"],[2,3,"pl-s"],[3,4,"pl-s"],[4,7,"pl-en"],[7,8,"pl-s"],[13,14,"pl-ml"],[38,39,"pl-s"],[39,40,"pl-s"],[40,43,"pl-en"],[43,44,"pl-s"],[66,67,"pl-ml"]],[[0,1,"pl-ml"],[4,6,"pl-c1"],[8,10,"pl-c1"],[13,14,"pl-ml"],[36,38,"pl-c1"],[64,66,"pl-c1"],[94,95,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[35,36,"pl-s"],[54,55,"pl-s"],[65,66,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[79,80,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[84,85,"pl-ml"]],[[0,1,"pl-ml"],[13,14,"pl-ml"],[56,57,"pl-ml"]],[],[],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,12,"pl-ent"]],[[8,17,"pl-ent"],[19,31,"pl-s"],[19,20,"pl-pds"],[30,31,"pl-pds"]],[[8,14,"pl-ent"],[16,39,"pl-s"],[16,17,"pl-pds"],[38,39,"pl-pds"]],[[8,12,"pl-ent"],[14,16,"pl-c1"]],[[8,21,"pl-ent"]],[[12,76,"pl-s"],[12,13,"pl-pds"],[75,76,"pl-pds"]],[[12,76,"pl-s"],[12,13,"pl-pds"],[75,76,"pl-pds"]],[],[[8,26,"pl-ent"]],[[12,17,"pl-c1"]],[[12,17,"pl-c1"]],[[12,17,"pl-c1"]],[],[[8,16,"pl-ent"],[18,23,"pl-c1"]],[],[[4,10,"pl-ent"],[12,15,"pl-c1"]],[[4,9,"pl-ent"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[4,5,"pl-s"],[5,16,"pl-c1"],[16,17,"pl-s"],[20,21,"pl-s"],[21,37,"pl-c1"],[37,38,"pl-s"]],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[[12,13,"pl-s"],[13,18,"pl-c1"],[18,19,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,28,"pl-ent"],[29,34,"pl-c1"]],[[8,17,"pl-ent"],[18,52,"pl-s"],[18,19,"pl-pds"],[51,52,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[],[[4,8,"pl-s"],[4,5,"pl-pds"],[7,8,"pl-pds"],[8,9,"pl-k"],[12,122,"pl-c"],[12,14,"pl-c"]],[],[],[[12,20,"pl-s"],[12,13,"pl-pds"],[19,20,"pl-pds"],[20,21,"pl-k"]],[[16,22,"pl-s"],[16,17,"pl-pds"],[21,22,"pl-pds"],[22,23,"pl-k"],[24,47,"pl-s"],[24,25,"pl-pds"],[46,47,"pl-pds"]],[[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[20,21,"pl-k"],[22,24,"pl-c1"]],[[16,34,"pl-s"],[16,17,"pl-pds"],[33,34,"pl-pds"],[34,35,"pl-k"]],[[20,25,"pl-c1"]],[[20,25,"pl-c1"]],[[20,25,"pl-c1"]],[],[],[],[],[[12,20,"pl-s"],[12,13,"pl-pds"],[19,20,"pl-pds"],[20,21,"pl-k"]],[[16,25,"pl-s"],[16,17,"pl-pds"],[24,25,"pl-pds"],[25,26,"pl-k"],[27,53,"pl-s"],[27,28,"pl-pds"],[52,53,"pl-pds"]],[[16,22,"pl-s"],[16,17,"pl-pds"],[21,22,"pl-pds"],[22,23,"pl-k"],[24,47,"pl-s"],[24,25,"pl-pds"],[46,47,"pl-pds"]],[[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[20,21,"pl-k"],[22,24,"pl-c1"]],[[16,34,"pl-s"],[16,17,"pl-pds"],[33,34,"pl-pds"],[34,35,"pl-k"]],[[20,25,"pl-c1"]],[[20,25,"pl-c1"]],[[20,25,"pl-c1"]],[],[],[],[],[[12,20,"pl-s"],[12,13,"pl-pds"],[19,20,"pl-pds"],[20,21,"pl-k"]],[[16,25,"pl-s"],[16,17,"pl-pds"],[24,25,"pl-pds"],[25,26,"pl-k"],[27,71,"pl-s"],[27,28,"pl-pds"],[70,71,"pl-pds"]],[[16,22,"pl-s"],[16,17,"pl-pds"],[21,22,"pl-pds"],[22,23,"pl-k"],[24,47,"pl-s"],[24,25,"pl-pds"],[46,47,"pl-pds"]],[[16,20,"pl-s"],[16,17,"pl-pds"],[19,20,"pl-pds"],[20,21,"pl-k"],[22,35,"pl-c1"]],[[16,34,"pl-s"],[16,17,"pl-pds"],[33,34,"pl-pds"],[34,35,"pl-k"]],[[20,25,"pl-c1"]],[],[],[],[],[[4,10,"pl-s"],[4,5,"pl-pds"],[9,10,"pl-pds"],[10,11,"pl-k"],[12,15,"pl-c1"]],[[4,9,"pl-s"],[4,5,"pl-pds"],[8,9,"pl-pds"],[9,10,"pl-k"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[[0,8,"pl-mh"],[6,8,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,17,"pl-ent"],[18,52,"pl-s"],[18,19,"pl-pds"],[51,52,"pl-pds"]],[],[[4,10,"pl-ent"],[12,13,"pl-c1"]],[[4,11,"pl-ent"],[13,14,"pl-c1"]],[],[],[[0,3,"pl-s"]],[],[[8,9,"pl-s"],[9,13,"pl-c1"],[13,14,"pl-s"],[17,18,"pl-s"],[18,23,"pl-c1"],[23,24,"pl-s"],[29,30,"pl-s"],[30,33,"pl-c1"],[33,34,"pl-s"],[43,44,"pl-s"],[44,50,"pl-c1"],[50,51,"pl-s"],[59,60,"pl-s"],[60,65,"pl-c1"],[65,66,"pl-s"],[75,76,"pl-s"],[76,80,"pl-c1"],[80,81,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,6,"pl-k"],[7,11,"pl-s"],[7,8,"pl-pds"],[10,11,"pl-pds"],[12,18,"pl-s"],[12,13,"pl-pds"],[17,18,"pl-pds"],[19,28,"pl-s"],[19,20,"pl-pds"],[27,28,"pl-pds"],[29,47,"pl-s"],[29,30,"pl-pds"],[46,47,"pl-pds"],[48,52,"pl-k"],[53,58,"pl-s"],[53,54,"pl-pds"],[57,58,"pl-pds"],[59,67,"pl-s"],[59,60,"pl-pds"],[66,67,"pl-pds"],[68,73,"pl-k"],[74,75,"pl-c1"],[83,84,"pl-c1"]],[[0,3,"pl-s"]],[],[[2,3,"pl-s"],[3,6,"pl-c1"],[6,7,"pl-s"],[12,13,"pl-s"],[13,19,"pl-c1"],[19,20,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[],[[2,6,"pl-s"],[2,3,"pl-pds"],[5,6,"pl-pds"],[6,7,"pl-k"]],[[6,14,"pl-s"],[6,7,"pl-pds"],[13,14,"pl-pds"],[14,15,"pl-k"]],[[8,17,"pl-s"],[8,9,"pl-pds"],[16,17,"pl-pds"],[17,18,"pl-k"],[18,52,"pl-s"],[18,19,"pl-pds"],[51,52,"pl-pds"]],[],[[6,13,"pl-s"],[6,7,"pl-pds"],[12,13,"pl-pds"],[13,14,"pl-k"],[15,16,"pl-c1"]],[],[[2,10,"pl-s"],[2,3,"pl-pds"],[9,10,"pl-pds"],[10,11,"pl-k"],[11,22,"pl-s"],[11,12,"pl-pds"],[21,22,"pl-pds"],[23,92,"pl-c"],[23,25,"pl-c"]],[],[[0,3,"pl-s"]],[],[[5,6,"pl-s"],[6,11,"pl-c1"],[11,12,"pl-s"],[27,28,"pl-s"],[28,34,"pl-c1"],[34,35,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[1,8,"pl-ent"],[9,11,"pl-c1"],[12,18,"pl-ent"],[19,22,"pl-c1"],[23,28,"pl-ent"],[29,38,"pl-s"],[29,30,"pl-pds"],[37,38,"pl-pds"]],[[0,3,"pl-s"]],[],[],[],[],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,17,"pl-ent"],[18,52,"pl-s"],[18,19,"pl-pds"],[51,52,"pl-pds"]],[[8,28,"pl-ent"],[29,34,"pl-c1"]],[],[[6,13,"pl-ent"],[15,16,"pl-c1"]],[],[[2,10,"pl-ent"],[11,22,"pl-s"],[11,12,"pl-pds"],[21,22,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[1,8,"pl-ent"],[9,11,"pl-c1"],[12,18,"pl-ent"],[19,22,"pl-c1"],[23,28,"pl-ent"],[29,38,"pl-s"],[29,30,"pl-pds"],[37,38,"pl-pds"]],[[0,3,"pl-s"]],[],[],[],[[0,8,"pl-mh"],[6,8,"pl-en"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,6,"pl-ent"]],[[6,14,"pl-ent"]],[[8,17,"pl-ent"],[18,52,"pl-s"],[18,19,"pl-pds"],[51,52,"pl-pds"]],[[8,28,"pl-ent"],[29,34,"pl-c1"]],[[8,16,"pl-ent"],[17,36,"pl-s"],[17,18,"pl-pds"],[35,36,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[[0,1,"pl-s"],[1,30,"pl-c1"],[30,31,"pl-s"],[53,54,"pl-s"],[54,56,"pl-c1"],[56,57,"pl-s"],[60,61,"pl-s"],[61,64,"pl-c1"],[64,65,"pl-s"],[80,81,"pl-s"],[81,86,"pl-c1"],[86,87,"pl-s"],[92,93,"pl-s"],[93,97,"pl-c1"],[97,98,"pl-s"]],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[],[],[],[],[[0,2,"pl-s"],[15,16,"pl-s"],[16,17,"pl-s"],[17,41,"pl-corl"],[41,42,"pl-s"]],[],[],[],[],[],[[0,3,"pl-s"],[3,5,"pl-en"]],[],[[2,6,"pl-s"],[2,3,"pl-pds"],[5,6,"pl-pds"],[6,7,"pl-k"]],[[4,12,"pl-s"],[4,5,"pl-pds"],[11,12,"pl-pds"],[12,13,"pl-k"]],[[8,17,"pl-s"],[8,9,"pl-pds"],[16,17,"pl-pds"],[17,18,"pl-k"],[18,34,"pl-s"],[18,19,"pl-pds"],[33,34,"pl-pds"]],[[8,12,"pl-s"],[8,9,"pl-pds"],[11,12,"pl-pds"],[12,13,"pl-k"],[13,15,"pl-c1"],[16,60,"pl-c"],[16,18,"pl-c"]],[],[[4,10,"pl-s"],[4,5,"pl-pds"],[9,10,"pl-pds"],[10,11,"pl-k"]],[[6,11,"pl-s"],[6,7,"pl-pds"],[10,11,"pl-pds"],[11,12,"pl-k"],[12,28,"pl-s"],[12,13,"pl-pds"],[27,28,"pl-pds"],[30,48,"pl-c"],[30,32,"pl-c"]],[[6,15,"pl-s"],[6,7,"pl-pds"],[14,15,"pl-pds"],[15,16,"pl-k"],[16,25,"pl-s"],[16,17,"pl-pds"],[24,25,"pl-pds"]],[],[],[],[[0,3,"pl-s"]],[],[[16,17,"pl-s"],[17,19,"pl-c1"],[19,20,"pl-s"],[48,49,"pl-s"],[49,55,"pl-c1"],[55,56,"pl-s"],[59,60,"pl-s"],[60,64,"pl-c1"],[64,65,"pl-s"]],[],[[3,4,"pl-s"],[4,10,"pl-c1"],[10,11,"pl-s"]],[],[[0,1,"pl-s"],[1,5,"pl-c1"],[5,6,"pl-s"],[10,11,"pl-s"],[11,17,"pl-c1"],[17,18,"pl-s"],[39,40,"pl-s"],[40,43,"pl-c1"],[43,44,"pl-s"]],[],[[0,1,"pl-s"],[1,15,"pl-c1"],[15,16,"pl-s"],[24,25,"pl-s"],[25,26,"pl-c1"],[26,27,"pl-s"],[36,37,"pl-s"],[37,39,"pl-c1"],[39,40,"pl-s"],[45,46,"pl-s"],[46,53,"pl-c1"],[53,54,"pl-s"],[58,59,"pl-s"],[59,61,"pl-c1"],[61,62,"pl-s"],[68,69,"pl-s"],[69,75,"pl-c1"],[75,76,"pl-s"],[80,81,"pl-s"],[81,95,"pl-c1"],[95,96,"pl-s"],[100,101,"pl-s"],[101,107,"pl-c1"],[107,108,"pl-s"],[111,112,"pl-s"],[112,118,"pl-c1"],[118,119,"pl-s"],[125,126,"pl-s"],[126,130,"pl-c1"],[130,131,"pl-s"],[134,135,"pl-s"],[135,137,"pl-c1"],[137,138,"pl-s"],[166,167,"pl-s"],[167,183,"pl-c1"],[183,184,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,8,"pl-ent"]],[],[[12,20,"pl-ent"]],[[16,22,"pl-ent"],[24,47,"pl-s"],[24,25,"pl-pds"],[46,47,"pl-pds"]],[[16,20,"pl-ent"],[22,24,"pl-c1"]],[[16,24,"pl-ent"],[26,31,"pl-c1"]],[],[[12,18,"pl-ent"]],[[16,20,"pl-ent"],[22,27,"pl-c1"]],[[16,22,"pl-ent"],[24,32,"pl-s"],[24,25,"pl-pds"],[31,32,"pl-pds"]],[],[],[],[[4,10,"pl-ent"],[12,15,"pl-c1"]],[[4,9,"pl-ent"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[[0,10,"pl-mh"],[6,10,"pl-en"]],[],[],[],[[0,1,"pl-ml"],[6,7,"pl-ml"],[33,34,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[38,39,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[26,27,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[27,28,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[9,10,"pl-ml"],[25,26,"pl-ml"]],[],[],[],[[0,116,"pl-corl"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,10,"pl-ent"]],[[5,14,"pl-ent"],[15,30,"pl-s"],[15,16,"pl-pds"],[29,30,"pl-pds"]],[],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,10,"pl-ent"]],[[5,12,"pl-ent"],[14,27,"pl-c1"]],[],[[2,8,"pl-ent"],[10,13,"pl-c1"]],[[2,7,"pl-ent"],[9,18,"pl-s"],[9,10,"pl-pds"],[17,18,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[3,4,"pl-s"],[4,9,"pl-c1"],[9,10,"pl-s"]],[],[[18,19,"pl-s"],[19,25,"pl-c1"],[25,26,"pl-s"]],[],[],[],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[[0,1,"pl-ml"],[7,8,"pl-ml"],[18,19,"pl-ml"],[25,26,"pl-ml"]],[],[],[],[[0,3,"pl-s"],[3,3,"pl-c1"]],[[0,1,"pl-c1"]],[[0,9,"pl-c1"]],[[0,14,"pl-c1"]],[[0,67,"pl-c1"]],[[0,27,"pl-c1"]],[[0,7,"pl-c1"]],[[0,3,"pl-c1"]],[[0,1,"pl-c1"]],[[0,0,"pl-c1"],[0,3,"pl-s"]],[],[[0,13,"pl-mh"],[5,13,"pl-en"]],[],[],[],[[5,6,"pl-s"],[6,33,"pl-c1"],[33,34,"pl-s"],[37,38,"pl-s"],[38,65,"pl-c1"],[65,66,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[2,9,"pl-ent"],[11,24,"pl-s"],[11,12,"pl-pds"],[23,24,"pl-pds"]],[[2,12,"pl-ent"],[13,22,"pl-s"],[13,14,"pl-pds"],[21,22,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[10,11,"pl-s"],[11,26,"pl-c1"],[26,27,"pl-s"]],[],[[0,15,"pl-mh"],[5,15,"pl-en"]],[],[[5,6,"pl-s"],[6,32,"pl-c1"],[32,33,"pl-s"]],[],[],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[1,9,"pl-ent"]],[[6,15,"pl-ent"],[16,34,"pl-s"],[16,17,"pl-pds"],[33,34,"pl-pds"]],[[6,14,"pl-ent"],[15,20,"pl-c1"]],[],[[2,7,"pl-ent"],[8,16,"pl-s"],[8,9,"pl-pds"],[15,16,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[0,1,"pl-s"],[1,4,"pl-c1"],[4,5,"pl-s"],[11,12,"pl-s"],[12,19,"pl-c1"],[19,20,"pl-s"],[28,29,"pl-s"],[29,32,"pl-c1"],[32,33,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,12,"pl-ent"]],[[8,14,"pl-ent"],[16,19,"pl-c1"]],[[8,15,"pl-ent"],[17,18,"pl-c1"]],[[8,12,"pl-ent"],[14,27,"pl-c1"]],[[8,13,"pl-ent"],[15,24,"pl-s"],[15,16,"pl-pds"],[23,24,"pl-pds"]],[],[[4,10,"pl-ent"],[12,15,"pl-c1"]],[[4,9,"pl-ent"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[4,5,"pl-s"],[5,7,"pl-c1"],[7,8,"pl-s"]],[],[[0,15,"pl-mh"],[5,15,"pl-en"]],[],[[5,6,"pl-s"],[6,31,"pl-c1"],[31,32,"pl-s"]],[],[],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[1,9,"pl-ent"]],[[6,10,"pl-ent"],[11,24,"pl-c1"]],[[6,15,"pl-ent"],[16,44,"pl-s"],[16,17,"pl-pds"],[43,44,"pl-pds"]],[],[[2,7,"pl-ent"],[8,16,"pl-s"],[8,9,"pl-pds"],[15,16,"pl-pds"]],[],[[0,3,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[4,12,"pl-ent"]],[[8,14,"pl-ent"],[16,19,"pl-c1"]],[[8,15,"pl-ent"],[17,18,"pl-c1"]],[[8,12,"pl-ent"],[14,27,"pl-c1"]],[[8,13,"pl-ent"],[15,24,"pl-s"],[15,16,"pl-pds"],[23,24,"pl-pds"]],[],[[4,10,"pl-ent"],[12,15,"pl-c1"]],[[4,9,"pl-ent"],[11,20,"pl-s"],[11,12,"pl-pds"],[19,20,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[5,6,"pl-s"],[6,10,"pl-c1"],[10,11,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[1,9,"pl-ent"]],[[6,10,"pl-ent"],[11,24,"pl-c1"]],[[6,25,"pl-ent"],[28,31,"pl-c1"]],[],[[2,7,"pl-ent"],[8,16,"pl-s"],[8,9,"pl-pds"],[15,16,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[4,5,"pl-s"],[5,21,"pl-c1"],[21,22,"pl-s"],[27,28,"pl-s"],[28,32,"pl-c1"],[32,33,"pl-s"],[50,51,"pl-s"],[51,53,"pl-c1"],[53,54,"pl-s"],[62,63,"pl-s"],[63,68,"pl-c1"],[68,69,"pl-s"],[86,87,"pl-s"],[87,95,"pl-c1"],[95,96,"pl-s"]],[],[[10,11,"pl-s"],[11,12,"pl-c1"],[12,13,"pl-s"],[17,18,"pl-s"],[18,19,"pl-c1"],[19,20,"pl-s"],[29,30,"pl-s"],[30,31,"pl-c1"],[31,32,"pl-s"],[34,35,"pl-s"],[35,36,"pl-c1"],[36,37,"pl-s"],[61,63,"pl-c1"],[66,67,"pl-s"]],[],[[0,15,"pl-mh"],[5,15,"pl-en"]],[],[[5,6,"pl-s"],[6,34,"pl-c1"],[34,35,"pl-s"]],[],[],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[],[[1,9,"pl-ent"]],[[6,10,"pl-ent"],[11,24,"pl-c1"]],[],[[2,7,"pl-ent"],[8,16,"pl-s"],[8,9,"pl-pds"],[15,16,"pl-pds"]],[],[[0,3,"pl-s"]],[],[[0,12,"pl-mh"],[4,12,"pl-en"]],[],[[0,15,"pl-mh"],[5,15,"pl-en"]],[],[[22,23,"pl-s"],[23,30,"pl-c1"],[30,31,"pl-s"]],[],[[0,3,"pl-s"],[3,6,"pl-en"]],[[0,5,"pl-c"],[0,2,"pl-c"]],[[0,6,"pl-k"],[7,12,"pl-k"],[14,21,"pl-en"]],[[2,6,"pl-s"],[2,3,"pl-pds"],[5,6,"pl-pds"],[7,13,"pl-k"],[14,16,"pl-c1"],[18,26,"pl-k"]],[[2,8,"pl-s"],[2,3,"pl-pds"],[7,8,"pl-pds"],[9,12,"pl-k"],[13,15,"pl-c1"],[17,21,"pl-k"],[30,34,"pl-s"],[30,31,"pl-pds"],[33,34,"pl-pds"]],[[2,9,"pl-s"],[2,3,"pl-pds"],[8,9,"pl-pds"],[10,13,"pl-k"],[14,16,"pl-c1"],[18,22,"pl-k"],[31,35,"pl-s"],[31,32,"pl-pds"],[34,35,"pl-pds"]],[[2,10,"pl-s"],[2,3,"pl-pds"],[9,10,"pl-pds"],[11,14,"pl-k"],[15,17,"pl-c1"],[19,23,"pl-k"]],[[2,9,"pl-s"],[2,3,"pl-pds"],[8,9,"pl-pds"],[11,14,"pl-k"],[15,17,"pl-c1"],[19,23,"pl-k"]],[[2,10,"pl-s"],[2,3,"pl-pds"],[9,10,"pl-pds"],[11,14,"pl-k"],[15,17,"pl-c1"],[19,23,"pl-k"]],[[2,10,"pl-s"],[2,3,"pl-pds"],[9,10,"pl-pds"],[17,18,"pl-c1"],[19,20,"pl-c1"],[22,26,"pl-k"]],[[2,16,"pl-s"],[2,3,"pl-pds"],[15,16,"pl-pds"],[34,51,"pl-c1"],[60,66,"pl-s"],[60,61,"pl-pds"],[65,66,"pl-pds"]],[[2,14,"pl-s"],[2,3,"pl-pds"],[13,14,"pl-pds"],[15,24,"pl-k"],[33,50,"pl-c1"],[51,53,"pl-k"],[54,60,"pl-k"],[61,78,"pl-c1"],[87,93,"pl-s"],[87,88,"pl-pds"],[92,93,"pl-pds"]],[[2,12,"pl-s"],[2,3,"pl-pds"],[11,12,"pl-pds"],[13,20,"pl-k"],[21,23,"pl-c1"],[25,29,"pl-k"]],[[2,13,"pl-k"],[15,19,"pl-s"],[15,16,"pl-pds"],[18,19,"pl-pds"]],[[8,9,"pl-k"],[31,32,"pl-k"]],[[0,3,"pl-s"]],[],[[0,12,"pl-mh"],[5,12,"pl-en"]],[],[],[],[[0,28,"pl-mh"],[6,28,"pl-en"]],[],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,111,"pl-corl"],[111,112,"pl-s"]],[],[[1,3,"pl-ent"]],[[1,3,"pl-ent"]],[],[[0,2,"pl-s"],[72,74,"pl-s"]],[],[[0,32,"pl-mh"],[6,32,"pl-en"],[6,8,"pl-s"],[30,32,"pl-s"]],[],[[0,2,"pl-s"],[21,23,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,7,"pl-k"],[8,33,"pl-smi"]],[],[[0,6,"pl-k"],[7,36,"pl-smi"]],[],[[0,13,"pl-k"]],[[0,6,"pl-k"],[7,12,"pl-k"],[13,18,"pl-en"]],[],[[0,3,"pl-s"]],[],[[0,2,"pl-s"],[4,5,"pl-s"],[5,18,"pl-c1"],[18,19,"pl-s"],[30,32,"pl-s"]],[],[],[],[[0,2,"pl-s"],[36,38,"pl-s"]],[],[[0,2,"pl-s"],[13,14,"pl-s"],[14,27,"pl-c1"],[27,28,"pl-s"],[33,35,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,28,"pl-c"],[0,2,"pl-c"]],[[1,7,"pl-k"]],[[2,15,"pl-c1"],[15,16,"pl-k"],[20,24,"pl-smi"],[24,25,"pl-k"],[30,31,"pl-k"],[48,62,"pl-s"],[48,49,"pl-pds"],[61,62,"pl-pds"]],[[2,15,"pl-c1"],[15,16,"pl-k"],[20,27,"pl-smi"],[27,28,"pl-k"],[33,34,"pl-k"],[51,68,"pl-s"],[51,52,"pl-pds"],[67,68,"pl-pds"]],[[2,15,"pl-c1"],[15,16,"pl-k"],[20,25,"pl-smi"],[25,26,"pl-k"],[31,32,"pl-k"],[49,58,"pl-s"],[49,50,"pl-pds"],[57,58,"pl-pds"],[61,70,"pl-c"],[61,63,"pl-c"]],[],[[0,3,"pl-s"]],[],[],[],[[0,2,"pl-s"],[33,35,"pl-s"]],[],[[0,2,"pl-s"],[5,6,"pl-s"],[6,23,"pl-c1"],[23,24,"pl-s"],[31,33,"pl-s"]],[],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,6,"pl-k"],[9,15,"pl-c"],[9,11,"pl-c"]],[[2,12,"pl-c1"],[12,13,"pl-k"],[17,21,"pl-smi"],[21,22,"pl-k"],[27,28,"pl-k"],[58,62,"pl-smi"],[62,63,"pl-k"],[68,69,"pl-k"],[83,95,"pl-smi"],[95,96,"pl-k"]],[[0,4,"pl-c1"]],[[2,12,"pl-c1"],[12,13,"pl-k"],[17,22,"pl-smi"],[22,23,"pl-k"],[28,29,"pl-k"],[59,64,"pl-smi"],[64,65,"pl-k"],[70,71,"pl-k"],[85,97,"pl-smi"],[97,98,"pl-k"]],[],[[0,3,"pl-s"]],[],[[1,3,"pl-ent"]],[[1,3,"pl-ent"]],[],[[0,23,"pl-mh"],[5,23,"pl-en"]],[[0,2,"pl-s"],[2,3,"pl-s"],[3,4,"pl-s"],[4,112,"pl-corl"],[112,113,"pl-s"]],[[38,40,"pl-ent"]],[[0,3,"pl-s"],[3,7,"pl-en"]],[[0,8,"pl-ent"]],[[2,10,"pl-ent"],[12,13,"pl-c1"],[14,15,"pl-c1"],[16,17,"pl-c1"]],[],[[0,3,"pl-s"]],[[28,30,"pl-ent"]],[[4,6,"pl-ent"]],[[0,3,"pl-s"],[3,5,"pl-en"]],[[0,8,"pl-s"],[0,1,"pl-pds"],[7,8,"pl-pds"],[8,9,"pl-k"],[12,22,"pl-s"],[12,13,"pl-pds"],[21,22,"pl-pds"],[22,23,"pl-k"],[23,35,"pl-s"],[23,24,"pl-pds"],[34,35,"pl-pds"],[51,82,"pl-c"],[51,53,"pl-c"]],[[0,6,"pl-s"],[0,1,"pl-pds"],[5,6,"pl-pds"],[6,7,"pl-k"],[10,19,"pl-s"],[10,11,"pl-pds"],[18,19,"pl-pds"],[19,20,"pl-k"],[21,30,"pl-s"],[21,22,"pl-pds"],[29,30,"pl-pds"],[52,98,"pl-c"],[52,54,"pl-c"]],[[0,8,"pl-s"],[0,1,"pl-pds"],[7,8,"pl-pds"],[8,9,"pl-k"],[10,17,"pl-s"],[10,11,"pl-pds"],[16,17,"pl-pds"],[51,72,"pl-c"],[51,53,"pl-c"]],[[0,11,"pl-s"],[0,1,"pl-pds"],[10,11,"pl-pds"],[11,12,"pl-k"],[13,22,"pl-s"],[13,14,"pl-pds"],[21,22,"pl-pds"],[51,69,"pl-c"],[51,53,"pl-c"]],[[0,10,"pl-s"],[0,1,"pl-pds"],[9,10,"pl-pds"],[10,11,"pl-k"],[12,21,"pl-s"],[12,13,"pl-pds"],[20,21,"pl-pds"],[51,67,"pl-c"],[51,53,"pl-c"]],[[0,8,"pl-s"],[0,1,"pl-pds"],[7,8,"pl-pds"],[8,9,"pl-k"],[12,19,"pl-s"],[12,13,"pl-pds"],[18,19,"pl-pds"],[19,20,"pl-k"],[21,28,"pl-s"],[21,22,"pl-pds"],[27,28,"pl-pds"],[51,69,"pl-c"],[51,53,"pl-c"]],[[0,8,"pl-s"],[0,1,"pl-pds"],[7,8,"pl-pds"],[8,9,"pl-k"],[12,17,"pl-s"],[12,13,"pl-pds"],[16,17,"pl-pds"],[17,18,"pl-k"],[19,28,"pl-s"],[19,20,"pl-pds"],[27,28,"pl-pds"],[51,60,"pl-c"],[51,53,"pl-c"]],[[0,3,"pl-s"]],[[7,8,"pl-s"],[22,23,"pl-s"],[23,24,"pl-s"],[24,122,"pl-corl"],[122,123,"pl-s"]],[[1,3,"pl-ent"]],[[1,3,"pl-ent"]],[],[],[[0,30,"pl-s"],[1,29,"pl-k"]],[],[[0,14,"pl-mh"],[5,14,"pl-en"]],[[0,60,"pl-corl"]],[],[]],"colorizedLines":null}},"title":"APIJSON/详细的说明文档.md at master · JunDaTang/APIJSON","appPayload":{},"meta":{"title":"APIJSON/详细的说明文档.md at master · JunDaTang/APIJSON"}}</script>
  <div data-target="react-app.reactRoot"><meta name="github-code-view-meta-stats" id="github-code-view-meta-stats" data-hydrostats="publish"/> <!-- --> <a hidden="" id="code-view-repo-link" href="/JunDaTang/APIJSON" data-discover="true"></a> <div class="d-none"></div><div><div style="--spacing:var(--spacing-none)" class="prc-PageLayout-PageLayoutRoot--KH-d" data-component="SplitPageLayout" data-has-sidebar="true"><div class="prc-PageLayout-SidebarWrapper-kLG4B CopilotSidePanelSidebar-module__SidePanel__L3O0C CopilotSidePanelSidebar-module__HiddenSidePanel__TBRGn" style="--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="end" data-sticky="true" data-responsive-variant="fullscreen"><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-SidebarVerticalDivider-0Rl0V" data-component="PageLayout.VerticalDivider" data-variant="line" data-position="end" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="450" aria-valuemax="768" aria-valuenow="544" aria-valuetext="Pane width 544 pixels" tabindex="0"></div></div><div class="prc-PageLayout-Sidebar-iciWg" data-component="SplitPageLayout.Sidebar" data-resizable="true" style="--spacing:var(--spacing-normal);--pane-min-width:450px;--pane-max-width:768px;--pane-width-custom:544px;--pane-width-size:var(--pane-width-custom);--pane-width:544px"><div class="height-full" data-testid="copilot-code-view-side-panel"><div id="copilot-side-panel-content" class="height-full"></div></div></div></div><div class="prc-PageLayout-PageLayoutWrapper-2BhU2" data-width="full"><div class="prc-PageLayout-PageLayoutContent-BneH9"><div id="repos-file-tree-sidebar" class="CodeViewFileTreeLayout-module__sidebar__n_Aau" tabindex="0"><div class="prc-PageLayout-PaneWrapper-pHPop ReposFileTreePane-module__Pane__rBZpI ReposFileTreePane-module__HideTree__AYZnm ReposFileTreePane-module__HidePane__VHAVt" style="--offset-header:0px;--spacing-row:var(--spacing-none);--spacing-column:var(--spacing-none)" data-is-hidden="false" data-position="start" data-sticky="true"><div class="prc-PageLayout-HorizontalDivider-JLVqp prc-PageLayout-PaneHorizontalDivider-9tbnE" data-component="PageLayout.HorizontalDivider" data-variant-regular="none" data-variant-narrow="none" data-position="start" style="--spacing-divider:var(--spacing-none);--spacing:var(--spacing-none)"></div><div class="prc-PageLayout-Pane-AyzHK" data-component="SplitPageLayout.Pane" data-resizable="true" style="--spacing:var(--spacing-none);--pane-min-width:256px;--pane-max-width:calc(100vw - var(--pane-max-width-diff));--pane-width-size:var(--pane-width-large);--pane-width:320px"></div><div class="prc-PageLayout-VerticalDivider-9QRmK prc-PageLayout-PaneVerticalDivider-le57g" data-component="PageLayout.VerticalDivider" data-variant-narrow="none" data-variant-regular="line" data-variant-wide="line" data-position="start" style="--spacing:var(--spacing-none)"><div class="prc-PageLayout-DraggableHandle-9s6B4" data-component="PageLayout.DragHandle" role="slider" aria-label="Draggable pane splitter" aria-valuemin="256" aria-valuemax="600" aria-valuenow="320" aria-valuetext="Pane width 320 pixels" tabindex="0"></div></div></div></div><div data-component="SplitPageLayout.Content" class="prc-PageLayout-ContentWrapper-gR9eG"><div class="prc-PageLayout-Content-xWL-A" data-width="full" style="--spacing:var(--spacing-none)"><div class="SharedPageLayout-module__content__IwGAp" data-selector="repos-split-pane-content" id="repos-split-pane-content" tabindex="0"> <!-- --> <div class="container CodeViewHeader-module__Box__JkPOb"><div class="CodeViewHeader-module__StickyHeader__Qn7UN" id="StickyHeader"><div class="CodeViewHeader-module__Box_1__SbNDV"><div class="CodeViewHeader-module__Box_2__TB46f"><div class="react-code-view-header-wrap--narrow CodeViewHeader-module__Box_3__q1zUL"><div class="CodeViewHeader-module__treeToggleWrapper__RQ__9"><h2 class="use-tree-pane-module__Heading__s4QbZ prc-Heading-Heading-MtWFE" data-component="Heading"><button data-component="Button" type="button" aria-label="Expand file tree" data-testid="expand-file-tree-button-mobile" class="prc-Button-ButtonBase-9n-Xk ExpandFileTreeButton-module__Button_1__Svs95" data-loading="false" data-size="medium" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-left" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M7.78 12.53a.75.75 0 0 1-1.06 0L2.47 8.28a.75.75 0 0 1 0-1.06l4.25-4.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042L4.81 7h7.44a.75.75 0 0 1 0 1.5H4.81l2.97 2.97a.75.75 0 0 1 0 1.06Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Files</span></span></button><button data-component="IconButton" type="button" data-testid="expand-file-tree-button" aria-controls="repos-file-tree" class="prc-Button-ButtonBase-9n-Xk position-relative ExpandFileTreeButton-module__expandButton__hDOcv ExpandFileTreeButton-module__filesButtonBreakpoint__zEvz3 fgColor-muted prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="invisible" aria-labelledby="_R_4lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-sidebar-collapse" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M6.823 7.823a.25.25 0 0 1 0 .354l-2.396 2.396A.25.25 0 0 1 4 10.396V5.604a.25.25 0 0 1 .427-.177Z"></path><path d="M1.75 0h12.5C15.216 0 16 .784 16 1.75v12.5A1.75 1.75 0 0 1 14.25 16H1.75A1.75 1.75 0 0 1 0 14.25V1.75C0 .784.784 0 1.75 0ZM1.5 1.75v12.5c0 .138.112.25.25.25H9.5v-13H1.75a.25.25 0 0 0-.25.25ZM11 14.5h3.25a.25.25 0 0 0 .25-.25V1.75a.25.25 0 0 0-.25-.25H11Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="se" data-component="Tooltip" aria-hidden="true" id="_R_4lla9lik5_">Expand file tree</span><div class="d-none"></div></h2></div><div class="react-code-view-header-mb--narrow mr-2"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector-wide"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="react-code-view-header-mb--narrow CodeViewHeader-module__Box_5__MQ0hL"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__lg__Rjz0A"><nav data-testid="breadcrumbs" aria-labelledby="repos-header-breadcrumb-heading" id="repos-header-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="repos-header-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/JunDaTang/APIJSON/tree/master" data-discover="true">APIJSON</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__lg__Rjz0A" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__lg__Rjz0A prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="file-name-id">详细的说明文档.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lla9lik5_">Copy path</span></div></div></div><div class="react-code-view-header-element--wide"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><div><div class="CodeViewHeader-module__FileResultsList__JDzUy"><span class="d-flex FileResultsList-module__FilesSearchBox__ivVkc TextInput-wrapper prc-components-TextInputWrapper-Hpdqi prc-components-TextInputBaseWrapper-wY-n0" data-no-trailing-action="true" data-component="TextInput" data-leading-visual="true" data-trailing-visual="true" aria-busy="false"><span class="TextInput-icon" id="_R_5ipla9lik5_" aria-hidden="true" data-component="TextInput.LeadingVisual"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-search" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M10.68 11.74a6 6 0 0 1-7.922-8.982 6 6 0 0 1 8.982 7.922l3.04 3.04a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215ZM11.5 7a4.499 4.499 0 1 0-8.997 0A4.499 4.499 0 0 0 11.5 7Z"></path></svg></span><input type="text" aria-label="Go to file" role="combobox" aria-controls="file-results-list" aria-expanded="false" aria-haspopup="dialog" autoCorrect="off" spellCheck="false" placeholder="Go to file" aria-describedby="_R_5ipla9lik5_ _R_5ipla9lik5H1_" data-component="input" class="prc-components-Input-IwWrt" value=""/><span class="TextInput-icon" id="_R_5ipla9lik5H1_" aria-hidden="true" data-component="TextInput.TrailingVisual"></span></span></div><div class="d-none"></div></div><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-wide" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4pla9lik5_" id="_R_14pla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4pla9lik5_">More file actions</span></div></div></div><div class="react-code-view-header-element--narrow"><div class="CodeViewHeader-module__Box_7___0R6c"><div class="d-flex gap-2"><button data-component="Button" type="button" style="display:none" class="prc-Button-ButtonBase-9n-Xk NavigationMenu-module__Button__LpKgm" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Blame</span></span></button><div class="d-none"></div><button data-component="IconButton" type="button" data-testid="more-file-actions-button-nav-menu-narrow" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click NavigationMenu-module__IconButton__HpX3G prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="medium" data-variant="default" aria-labelledby="_R_v4tla9lik5_" id="_R_14tla9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_v4tla9lik5_">More file actions</span></div></div></div></div></div></div></div><div class="CodeView-module__contentWrapper__cG2JH"><div class="react-code-view-bottom-padding"><div class="BlobTopBanners-module__Box__v_nvx"></div></div> <div class="d-none"></div><div class="d-flex flex-column border rounded-2 tmp-mb-3 pl-1"><div class="LatestCommit-module__Box__B25ZT"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">Latest commit</h2><div style="width:120px" class="Skeleton Skeleton--text" data-testid="loading"> </div><div class="d-flex flex-shrink-0 gap-2"><div data-testid="latest-commit-details" class="d-none d-sm-flex flex-items-center"></div><div class="d-flex gap-2"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">History</h2><a data-component="LinkButton" href="/JunDaTang/APIJSON/commits/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md" class="prc-Button-ButtonBase-9n-Xk d-none d-lg-flex LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><span class="fgColor-default">History</span></span></span></a><div class="d-sm-none"></div><div class="d-flex d-lg-none"><a data-component="LinkButton" aria-label="View commit history for this file." href="/JunDaTang/APIJSON/commits/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov flex-items-center fgColor-default" data-loading="false" data-size="small" data-variant="invisible" aria-describedby="_R_4mlala9lik5_"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-history" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m.427 1.927 1.215 1.215a8.002 8.002 0 1 1-1.6 5.685.75.75 0 1 1 1.493-.154 6.5 6.5 0 1 0 1.18-4.458l1.358 1.358A.25.25 0 0 1 3.896 6H.25A.25.25 0 0 1 0 5.75V2.104a.25.25 0 0 1 .427-.177ZM7.75 4a.75.75 0 0 1 .75.75v2.992l2.028.812a.75.75 0 0 1-.557 1.392l-2.5-1A.751.751 0 0 1 7 8.25v-3.5A.75.75 0 0 1 7.75 4Z"></path></svg></span></span></a><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" role="tooltip" aria-hidden="true" id="_R_4mlala9lik5_">History</span></div></div></div></div></div><div class="d-flex flex-row"><div class="container BlobViewContent-module__blobContainer__DtH2d"><div class="react-code-size-details-banner BlobViewContent-module__codeSizeDetails__e5sUw"><div class="react-code-size-details-banner CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="27.9 KB" style="--truncate-max-width:100%"><span>969 lines (702 loc) · 27.9 KB</span></div></div></div></div><div class="react-blob-view-header-sticky BlobViewContent-module__stickyHeader__VwxB5" id="repos-sticky-header"><div class="BlobViewHeader-module__Box__yhm9u"><div class="react-blob-sticky-header"><div class="FileNameStickyHeader-module__outerWrapper__ZL4Xc FileNameStickyHeader-module__outerWrapperHidden__Zpynk"><div class="FileNameStickyHeader-module__Box_1__Hazu5"><div class="FileNameStickyHeader-module__Box_2__hoolP"><div class="FileNameStickyHeader-module__Box_3__MVKsk"><button data-component="Button" type="button" aria-haspopup="true" aria-expanded="false" tabindex="0" aria-label="master branch" data-testid="anchor-button" data-icv-name="Switch branches/tags" class="prc-Button-ButtonBase-9n-Xk ref-selector-class RefSelectorAnchoredOverlay-module__RefSelectorOverlayBtn__a3WK3" data-loading="false" data-size="medium" data-variant="default" id="ref-picker-repos-header-ref-selector"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-git-branch" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M9.5 3.25a2.25 2.25 0 1 1 3 2.122V6A2.5 2.5 0 0 1 10 8.5H6a1 1 0 0 0-1 1v1.128a2.251 2.251 0 1 1-1.5 0V5.372a2.25 2.25 0 1 1 1.5 0v1.836A2.493 2.493 0 0 1 6 7h4a1 1 0 0 0 1-1v-.628A2.25 2.25 0 0 1 9.5 3.25Zm-6 0a.75.75 0 1 0 1.5 0 .75.75 0 0 0-1.5 0Zm8.25-.75a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5ZM4.25 12a.75.75 0 1 0 0 1.5.75.75 0 0 0 0-1.5Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3"><div class="RefSelectorAnchoredOverlay-module__RefSelectorOverlayContainer__yaf4p"><div style="max-width:125px" class="ref-selector-button-text-container RefSelectorAnchoredOverlay-module__RefSelectorBtnTextContainer__Di3rk"><span class="RefSelectorAnchoredOverlay-module__RefSelectorText__w_fmP">master</span></div></div></span><span data-component="trailingVisual" class="prc-Button-Visual-YNt2F prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-triangle-down" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="m4.427 7.427 3.396 3.396a.25.25 0 0 0 .354 0l3.396-3.396A.25.25 0 0 0 11.396 7H4.604a.25.25 0 0 0-.177.427Z"></path></svg></span></span></button><div class="d-none"></div></div><div class="FileNameStickyHeader-module__Box_4__FLhtt"><div class="Breadcrumb-module__container__Vxvev Breadcrumb-module__md__Wb1Gs"><nav data-testid="breadcrumbs" aria-labelledby="sticky-breadcrumb-heading" id="sticky-breadcrumb" class="Breadcrumb-module__nav__rQFDj"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading" id="sticky-breadcrumb-heading">Breadcrumbs</h2><ol class="Breadcrumb-module__list__ZH6zr"><li class="Breadcrumb-module__listItem__Ib0x_"><a class="Breadcrumb-module__repoLink__O2Nbs prc-Link-Link-9ZwDx" data-component="Link" data-testid="breadcrumbs-repo-link" href="/JunDaTang/APIJSON/tree/master" data-discover="true">APIJSON</a></li></ol></nav><div data-testid="breadcrumbs-filename" class="Breadcrumb-module__filename__equZR"><span class="Breadcrumb-module__separator__eNwsI Breadcrumb-module__md__Wb1Gs" aria-hidden="true">/</span><h1 class="Breadcrumb-module__filenameHeading__MNMtw Breadcrumb-module__md__Wb1Gs prc-Heading-Heading-MtWFE" data-component="Heading" tabindex="-1" id="sticky-file-name-id">详细的说明文档.md</h1></div><button data-component="IconButton" type="button" class="prc-Button-ButtonBase-9n-Xk ml-2 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_7lcpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="CopyToClipboardIconButton-module__tooltip__WyiwL prc-TooltipV2-Tooltip-tLeuB" data-direction="s" data-component="Tooltip" aria-label="Copy path" aria-hidden="true" id="_R_7lcpala9lik5_">Copy path</span></div></div></div><button data-component="Button" type="button" class="prc-Button-ButtonBase-9n-Xk FileNameStickyHeader-module__Button__LSEU_ FileNameStickyHeader-module__GoToTopButton__nxAFn" data-loading="false" data-size="small" data-variant="invisible"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="leadingVisual" class="prc-Button-Visual-YNt2F prc-Button-LeadingVisual-UySKu prc-Button-VisualWrap-E4cnq"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-arrow-up" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M3.47 7.78a.75.75 0 0 1 0-1.06l4.25-4.25a.75.75 0 0 1 1.06 0l4.25 4.25a.751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018L9 4.81v7.44a.75.75 0 0 1-1.5 0V4.81L4.53 7.78a.75.75 0 0 1-1.06 0Z"></path></svg></span><span data-component="text" class="prc-Button-Label-FWkx3">Top</span></span></button></div></div></div><div class="BlobViewHeader-module__Box_1__VEmuQ"><h2 class="sr-only ScreenReaderHeading-module__userSelectNone__rwWIk prc-Heading-Heading-MtWFE" data-component="Heading" data-testid="screen-reader-heading">File metadata and controls</h2><div class="BlobViewHeader-module__Box_2__icUs2"><ul aria-label="File view" class="prc-SegmentedControl-SegmentedControl-lqIXp BlobTabButtons-module__SegmentedControl__jen2u" data-variant="default" data-size="small" data-component="SegmentedControl"><li class="prc-SegmentedControl-Item-tSCQh" data-selected="" data-component="SegmentedControl.Button"><button aria-pressed="true" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:transparent"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Preview">Preview</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Code">Code</div></span></button></li><li class="prc-SegmentedControl-Item-tSCQh" data-component="SegmentedControl.Button"><button aria-pressed="false" class="prc-SegmentedControl-Button-E48xz" type="button" style="--separator-color:var(--borderColor-default)"><span class="prc-SegmentedControl-Content-1COlk segmentedControl-content"><div class="prc-SegmentedControl-Text-7S2y2 segmentedControl-text" data-text="Blame">Blame</div></span></button></li></ul><div class="d-none"></div><div class="react-code-size-details-in-header CodeSizeDetails-module__Box__VcD6l"><div class="text-mono CodeSizeDetails-module__Box_1__GVxQL"><div data-testid="blob-size" class="CodeSizeDetails-module__Truncate_1__lE93V prc-Truncate-Truncate-2G1eo" data-inline="true" title="27.9 KB" style="--truncate-max-width:100%"><span>969 lines (702 loc) · 27.9 KB</span></div></div></div></div><div class="BlobViewHeader-module__Box_3__ng6v2"><div class="d-none"></div><div class="react-blob-header-edit-and-raw-actions BlobViewHeader-module__Box_4__J4Y4W"><div class="d-none"></div><div class="prc-ButtonGroup-ButtonGroup-vFUrY" data-component="ButtonGroup"><div class="prc-ButtonGroup-Item-PqvDl"><a data-component="LinkButton" href="https://github.com/JunDaTang/APIJSON/raw/refs/heads/master/%E8%AF%A6%E7%BB%86%E7%9A%84%E8%AF%B4%E6%98%8E%E6%96%87%E6%A1%A3.md" data-testid="raw-button" class="prc-Button-ButtonBase-9n-Xk LinkButton-module__linkButton__nFnov BlobViewHeader-module__LinkButton__X9kx2" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default"><span data-component="buttonContent" data-align="center" class="prc-Button-ButtonContent-Iohp5"><span data-component="text" class="prc-Button-Label-FWkx3">Raw</span></span></a></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="copy-raw-button" class="prc-Button-ButtonBase-9n-Xk prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_qaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-copy" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_qaucpala9lik5_">Copy raw file</span></div><div class="prc-ButtonGroup-Item-PqvDl"><button data-component="IconButton" type="button" data-testid="download-raw-button" class="prc-Button-ButtonBase-9n-Xk BlobViewHeader-module__downloadButton__ef459 prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="default" aria-labelledby="_R_eaucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-download" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M2.75 14A1.75 1.75 0 0 1 1 12.25v-2.5a.75.75 0 0 1 1.5 0v2.5c0 .138.112.25.25.25h10.5a.25.25 0 0 0 .25-.25v-2.5a.75.75 0 0 1 1.5 0v2.5A1.75 1.75 0 0 1 13.25 14Z"></path><path d="M7.25 7.689V2a.75.75 0 0 1 1.5 0v5.689l1.97-1.969a.749.749 0 1 1 1.06 1.06l-3.25 3.25a.749.749 0 0 1-1.06 0L4.22 6.78a.749.749 0 1 1 1.06-1.06l1.97 1.969Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_eaucpala9lik5_">Download raw file</span></div></div></div><button data-component="IconButton" type="button" aria-pressed="false" class="prc-Button-ButtonBase-9n-Xk tmp-mr-2 TableOfContents-module__IconButton__jrlNM prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_3ucpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-list-unordered" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M5.75 2.5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5Zm0 5h8.5a.75.75 0 0 1 0 1.5h-8.5a.75.75 0 0 1 0-1.5ZM2 14a1 1 0 1 1 0-2 1 1 0 0 1 0 2Zm1-6a1 1 0 1 1-2 0 1 1 0 0 1 2 0ZM2 4a1 1 0 1 1 0-2 1 1 0 0 1 0 2Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="n" data-component="Tooltip" aria-hidden="true" id="_R_3ucpala9lik5_">Outline</span><div class="react-blob-header-edit-and-raw-actions-combined"><button data-component="IconButton" type="button" title="More file actions" data-testid="more-file-actions-button" aria-haspopup="true" aria-expanded="false" tabindex="0" class="prc-Button-ButtonBase-9n-Xk js-blob-dropdown-click BlobViewHeader-module__IconButton__XrMQY prc-Button-IconButton-fyge7" data-loading="false" data-no-visuals="true" data-size="small" data-variant="invisible" aria-labelledby="_R_fkecpala9lik5_" id="_R_kecpala9lik5_"><svg data-component="Octicon" aria-hidden="true" focusable="false" class="octicon octicon-kebab-horizontal" viewBox="0 0 16 16" width="16" height="16" fill="currentColor" display="inline-block" overflow="visible" style="vertical-align:text-bottom"><path d="M8 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3ZM1.5 9a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Zm13 0a1.5 1.5 0 1 0 0-3 1.5 1.5 0 0 0 0 3Z"></path></svg></button><span class="prc-TooltipV2-Tooltip-tLeuB" data-direction="nw" data-component="Tooltip" aria-hidden="true" id="_R_fkecpala9lik5_">Edit and raw actions</span></div></div></div></div><div></div></div><div class="BlobViewContent-module__blobContentWrapper__JS0W6"><section aria-labelledby="file-name-id-wide file-name-id-mobile" class="BlobContent-module__blobContentSection__VOgZq BlobContent-module__blobContentSectionMarkdown__mPLOK" style="margin-top:46px"><div class="js-snippet-clipboard-copy-unpositioned BlobContent-module__markdownBlob__T8jpG" data-hpc="true" containertiming="hpc"><article class="markdown-body entry-content container-lg" itemprop="text"><div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">APIJSON 入门教程</h1><a id="user-content-apijson-入门教程" class="anchor" aria-label="Permalink: APIJSON 入门教程" href="#apijson-入门教程"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">可以先看更清晰直观的视频教程 <br>
<a href="https://search.bilibili.com/all?keyword=APIJSON" rel="nofollow">https://search.bilibili.com/all?keyword=APIJSON</a>
<a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/5738175/135413311-0207ec13-f7ea-4767-9e34-1a6d08438295.png"><img src="https://user-images.githubusercontent.com/5738175/135413311-0207ec13-f7ea-4767-9e34-1a6d08438295.png" alt="image" style="max-width: 100%;"></a></p>
<p dir="auto">本文档已部署到官网，浏览和检索体验更好，但官网更新滞后，如有疏漏以本文档为准 <br>
<a href="http://apijson.cn/doc/zh/" rel="nofollow">http://apijson.cn/doc/zh/</a></p>
<p dir="auto">其它各种官方和第三方文档见首页相关推荐 <br>
<a href="https://github.com/Tencent/APIJSON#%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90">https://github.com/Tencent/APIJSON#%E7%9B%B8%E5%85%B3%E6%8E%A8%E8%8D%90</a></p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">A.介绍</h2><a id="user-content-a介绍" class="anchor" aria-label="Permalink: A.介绍" href="#a介绍"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">A1.关于接口开发</h3><a id="user-content-a1关于接口开发" class="anchor" aria-label="Permalink: A1.关于接口开发" href="#a1关于接口开发"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">首先是看名字 <code>APIJSON</code>，API 是说这个项目是属于接口开发的项目，JSON 是指传输数据格式是 JSON 格式。介于各位看官的水平高低不齐，这里就先为没有项目经验朋友啰嗦两句接口开发的内容。有经验的朋友可以跳到 <code>A2</code> 继续查看。完整的详细介绍见项目首页 <br>
<a href="https://github.com/Tencent/APIJSON#--apijson">https://github.com/Tencent/APIJSON#--apijson</a></p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">A2.功能说明</h3><a id="user-content-a2功能说明" class="anchor" aria-label="Permalink: A2.功能说明" href="#a2功能说明"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">一个接口的开发，比如 Java 用 SpringBoot + Mybatis 来开发一般来说就像下面这个流程</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1545468341131.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1545468341131.png" alt="1545468341131" style="max-width: 100%;"></a></p>
<p dir="auto">部署上这个项目后，流程变成了这样</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1545468361962.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1545468361962.png" alt="1545468361962" style="max-width: 100%;"></a></p>
<p dir="auto">如果使用 <a href="https://github.com/APIJSON/apijson-framework">apijson-framework</a>，还可进一步简化流程</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/Tencent/APIJSON/master/assets/1543975563776.png"><img src="https://raw.githubusercontent.com/Tencent/APIJSON/master/assets/1543975563776.png" alt="1543975563776" style="max-width: 100%;"></a></p>
<p dir="auto">换句话说，使用这个项目作为后端的支持的话，是不需要对每个表写增删改查等接口的，只需在该项目连接的数据里进行表的创建，以及配置接口权限即可。无需进行过多的开发，哪怕是要改结构也仅仅只需要修改表字段而已。想想仅仅是部署一个后端项目，现在需要写的接口就基本写好了，直接调用就行了，是不是挺爽的。</p>
<p dir="auto">说这么多，咱们直接开干吧！</p>
<div class="markdown-heading" dir="auto"><h1 tabindex="-1" class="heading-element" dir="auto">B.安装&amp;使用</h1><a id="user-content-b安装使用" class="anchor" aria-label="Permalink: B.安装&amp;使用" href="#b安装使用"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">B1.环境配置</h2><a id="user-content-b1环境配置" class="anchor" aria-label="Permalink: B1.环境配置" href="#b1环境配置"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">JDK: 1.8+</p>
<p dir="auto">MAVEN: 3.0+</p>
<p dir="auto">MySQL 5.7+ / PostgreSQL 9.5+ / Oracle 12C+ / ClickHouse 21.1+ / Presto 0.277+ / Hive 3.1.2+ / ...</p>
<p dir="auto">IntelliJ IDEA 2018+ / Eclipse Java EE IDE 4.5.1+</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">B2.下载项目</h2><a id="user-content-b2下载项目" class="anchor" aria-label="Permalink: B2.下载项目" href="#b2下载项目"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="git clone https://github.com/APIJSON/APIJSON-Demo.git"><pre lang="git" class="notranslate"><code>git clone https://github.com/APIJSON/APIJSON-Demo.git
</code></pre></div>
<p dir="auto">或者，直接下载 ZIP 打包好的项目文件。</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://user-images.githubusercontent.com/5738175/135412855-574cae7b-402c-4fe0-9959-711e580799af.png"><img src="https://user-images.githubusercontent.com/5738175/135412855-574cae7b-402c-4fe0-9959-711e580799af.png" alt="image" style="max-width: 100%;"></a></p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">B3.导入项目</h2><a id="user-content-b3导入项目" class="anchor" aria-label="Permalink: B3.导入项目" href="#b3导入项目"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">Eclipse 导入：</p>
<p dir="auto">顶部菜单 File &gt; Import &gt; Maven &gt; Existing Maven Projects &gt; Next &gt; Browse</p>
<p dir="auto">选择项目所在目录 <a href="https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server">/APIJSON-Demo-Master/APIJSON-Java-Server</a>/APIJSONBoot</p>
<p dir="auto">当报依赖错误的时候，将同目录下的 libs 里面的 jar 包添加到 Build Path 中。
<a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1542345887787.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1542345887787.png" alt="1542345887787" style="max-width: 100%;"></a></p>
<p dir="auto">为了方便修改源代码，你可以像我一样不添加 libs/APIJSON.jar 文件到 Build Path 中。而是将 libs/APIJSON.jar 的源码，复制到当前项目里，然后添加到 Build Path 中。</p>
<p dir="auto">源代码在 <a href="https://github.com/Tencent/APIJSON">APIJSON-Master/APIJSON-Java-Server</a>/APIJSONORM。</p>
<p dir="auto">IntelliJ IDEA 导入具体见：</p>
<p dir="auto"><a href="https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#3%E7%94%A8-intellij-idea-ultimate-%E6%88%96-eclipse-for-javaee-%E8%BF%90%E8%A1%8C%E5%90%8E%E7%AB%AF%E5%B7%A5%E7%A8%8B">https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#3%E7%94%A8-intellij-idea-ultimate-%E6%88%96-eclipse-for-javaee-%E8%BF%90%E8%A1%8C%E5%90%8E%E7%AB%AF%E5%B7%A5%E7%A8%8B</a></p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">B4.错误修改</h2><a id="user-content-b4错误修改" class="anchor" aria-label="Permalink: B4.错误修改" href="#b4错误修改"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">有可能 pom.xml 会报错，例如：</p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
	xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;"><pre>&lt;<span class="pl-s1">project</span> <span class="pl-s1">xmlns</span>=<span class="pl-s">"http://maven.apache.org/POM/4.0.0"</span> <span class="pl-s1">xmlns</span>:<span class="pl-s1">xsi</span>=<span class="pl-s">"http://www.w3.org/2001/XMLSchema-instance"</span>
	<span class="pl-s1">xsi</span>:<span class="pl-s1">schemaLocation</span>=<span class="pl-s">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span>&gt;</pre></div>
<p dir="auto">这段代码中的这一句提示错误：</p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd&quot;&gt;"><pre><span class="pl-s1">xsi</span>:<span class="pl-s1">schemaLocation</span>=<span class="pl-s">"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"</span>&gt;</pre></div>
<p dir="auto">修改步骤：</p>
<ul dir="auto">
<li>请修改 Eclipse 中的 Maven 镜像地址，以便更快下载或者更新，具体方法自行百度；</li>
<li>打开 Eclipse-&gt;Windows-&gt;Preferences-&gt;Maven-&gt;Installations-&gt;Add 这个按钮用于指定 Maven 的安装目录。这里不建议使用 Eclipse 自带的，需要再自己设置。最终效果如下图所示：
<a target="_blank" rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install3.png"><img src="https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install3.png" alt="install3" style="max-width: 100%;"></a></li>
<li>打开 Eclipse-&gt;Windows-&gt;Preferences-&gt;Maven-&gt;User Settings 这是指定 setting.xml 的位置，同时导向自己的本地 maven 仓库。最终效果如下图所示：
<a target="_blank" rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install4.png"><img src="https://raw.githubusercontent.com/APIJSON/APIJSON-Doc/master/docs/.vuepress/public/assets/install4.png" alt="install4" style="max-width: 100%;"></a></li>
</ul>
<p dir="auto">以上截图仅为示例，实际路径请以自己设定为准。</p>
<div class="markdown-heading" dir="auto"><h2 tabindex="-1" class="heading-element" dir="auto">C.开发说明</h2><a id="user-content-c开发说明" class="anchor" aria-label="Permalink: C.开发说明" href="#c开发说明"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C-1.基于 MySQL 数据库的开发流程</h3><a id="user-content-c-1基于-mysql-数据库的开发流程" class="anchor" aria-label="Permalink: C-1.基于 MySQL 数据库的开发流程" href="#c-1基于-mysql-数据库的开发流程"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">C-1-1.修改数据库链接</h4><a id="user-content-c-1-1修改数据库链接" class="anchor" aria-label="Permalink: C-1-1.修改数据库链接" href="#c-1-1修改数据库链接"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如我的数据库信息是这样的</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>数据库参数</th>
<th>值</th>
</tr>
</thead>
<tbody>
<tr>
<td>地址</td>
<td>localhost:3306</td>
</tr>
<tr>
<td>用户</td>
<td>root</td>
</tr>
<tr>
<td>密码</td>
<td>apijson</td>
</tr>
<tr>
<td>数据库</td>
<td>sys</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">那么需要在 <code>DemoSQLConfig</code> 配置数据库</p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="	static {
		DEFAULT_DATABASE = DATABASE_MYSQL;  // TODO 默认数据库类型，改成你自己的
		DEFAULT_SCHEMA = &quot;sys&quot;;  // TODO 默认数据库名/模式，改成你自己的，默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle: 
	}
	
	@Override
	public String getDBVersion() {
		return &quot;5.7.22&quot;;  // &quot;8.0.11&quot;;  // TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号  // MYSQL 8 和 7 使用的 JDBC 配置不一样
	}
	
	@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
	@Override
	public String getDBUri() {
		// 这个是 MySQL 8.0 及以上，要加 userSSL=false  return &quot;jdbc:mysql://localhost:3306?userSSL=false&amp;serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=UTF-8&quot;;
		// 以下是 MySQL 5.7 及以下
		return &quot;jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=UTF-8&quot;; //TODO 改成你自己的，TiDB 可以当成 MySQL 使用，默认端口为 4000
	}
	
	@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
	@Override
	public String getDBAccount() {
		return &quot;root&quot;;  // TODO 改成你自己的
	}
	
	@JSONField(serialize = false)  // 不在日志打印 账号/密码 等敏感信息
	@Override
	public String getDBPassword() {
		return &quot;apijson&quot;;  // TODO 改成你自己的，TiDB 可以当成 MySQL 使用， 默认密码为空字符串 &quot;&quot;
	}"><pre>	<span class="pl-k">static</span> {
		<span class="pl-c1">DEFAULT_DATABASE</span> = <span class="pl-c1">DATABASE_MYSQL</span>;  <span class="pl-c">// TODO 默认数据库类型，改成你自己的</span>
		<span class="pl-c1">DEFAULT_SCHEMA</span> = <span class="pl-s">"sys"</span>;  <span class="pl-c">// TODO 默认数据库名/模式，改成你自己的，默认情况是 MySQL: sys, PostgreSQL: public, SQL Server: dbo, Oracle: </span>
	}
	
	<span class="pl-c1">@</span><span class="pl-c1">Override</span>
	<span class="pl-k">public</span> <span class="pl-smi">String</span> <span class="pl-en">getDBVersion</span>() {
		<span class="pl-k">return</span> <span class="pl-s">"5.7.22"</span>;  <span class="pl-c">// "8.0.11";  // TODO 改成你自己的 MySQL 或 PostgreSQL 数据库版本号  // MYSQL 8 和 7 使用的 JDBC 配置不一样</span>
	}
	
	<span class="pl-c1">@</span><span class="pl-c1">JSONField</span>(<span class="pl-s1">serialize</span> = <span class="pl-c1">false</span>)  <span class="pl-c">// 不在日志打印 账号/密码 等敏感信息</span>
	<span class="pl-c1">@</span><span class="pl-c1">Override</span>
	<span class="pl-k">public</span> <span class="pl-smi">String</span> <span class="pl-en">getDBUri</span>() {
		<span class="pl-c">// 这个是 MySQL 8.0 及以上，要加 userSSL=false  return "jdbc:mysql://localhost:3306?userSSL=false&amp;serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=UTF-8";</span>
		<span class="pl-c">// 以下是 MySQL 5.7 及以下</span>
		<span class="pl-k">return</span> <span class="pl-s">"jdbc:mysql://localhost:3306?serverTimezone=GMT%2B8&amp;useUnicode=true&amp;characterEncoding=UTF-8"</span>; <span class="pl-c">//TODO 改成你自己的，TiDB 可以当成 MySQL 使用，默认端口为 4000</span>
	}
	
	<span class="pl-c1">@</span><span class="pl-c1">JSONField</span>(<span class="pl-s1">serialize</span> = <span class="pl-c1">false</span>)  <span class="pl-c">// 不在日志打印 账号/密码 等敏感信息</span>
	<span class="pl-c1">@</span><span class="pl-c1">Override</span>
	<span class="pl-k">public</span> <span class="pl-smi">String</span> <span class="pl-en">getDBAccount</span>() {
		<span class="pl-k">return</span> <span class="pl-s">"root"</span>;  <span class="pl-c">// TODO 改成你自己的</span>
	}
	
	<span class="pl-c1">@</span><span class="pl-c1">JSONField</span>(<span class="pl-s1">serialize</span> = <span class="pl-c1">false</span>)  <span class="pl-c">// 不在日志打印 账号/密码 等敏感信息</span>
	<span class="pl-c1">@</span><span class="pl-c1">Override</span>
	<span class="pl-k">public</span> <span class="pl-smi">String</span> <span class="pl-en">getDBPassword</span>() {
		<span class="pl-k">return</span> <span class="pl-s">"apijson"</span>;  <span class="pl-c">// TODO 改成你自己的，TiDB 可以当成 MySQL 使用， 默认密码为空字符串 ""</span>
	}</pre></div>
<p dir="auto">具体见源码 <br>
<a href="https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoSQLConfig.java">https://github.com/APIJSON/APIJSON-Demo/blob/master/APIJSON-Java-Server/APIJSONDemo/src/main/java/apijson/demo/DemoSQLConfig.java</a></p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">C-1-2.导入表</h4><a id="user-content-c-1-2导入表" class="anchor" aria-label="Permalink: C-1-2.导入表" href="#c-1-2导入表"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">在 <a href="https://github.com/APIJSON/APIJSON-Demo/tree/master/MySQL">APIJSON-Demo-Master/MySQL</a> 目录下有一批 SQL 脚本，他们看起来是这样的</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1542345654422.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1542345654422.png" alt="1542345654422" style="max-width: 100%;"></a></p>
<p dir="auto">MySQLWorkbench/Datagrip/Navicat 导入表具体见：</p>
<p dir="auto"><a href="https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#2%E5%AF%BC%E5%85%A5%E8%A1%A8%E6%96%87%E4%BB%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93">https://github.com/APIJSON/APIJSON-Demo/tree/master/APIJSON-Java-Server#2%E5%AF%BC%E5%85%A5%E8%A1%A8%E6%96%87%E4%BB%B6%E5%88%B0%E6%95%B0%E6%8D%AE%E5%BA%93</a></p>
<p dir="auto">导入完成之后。我们可以把项目跑起来看下，以刚刚配置的项目，项目是否能够连上数据库。其中也有一些初始化数据，可以方便我们测试。</p>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C-1-2-1.更多测试用例</h3><a id="user-content-c-1-2-1更多测试用例" class="anchor" aria-label="Permalink: C-1-2-1.更多测试用例" href="#c-1-2-1更多测试用例"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如果需要更多测试用例，请按照以下步骤获取：</p>
<ol dir="auto">
<li>用 Chrome(或 Firefox 等)浏览器中打开 <a href="http://apijson.cn/api" rel="nofollow">http://apijson.cn/api</a> ，或者 <a href="http://apijson.cn" rel="nofollow">http://apijson.cn</a> 然后点击按钮 [接口 APIAuto 测试] 也行；</li>
<li>点击右上角的“登录”按钮登录；</li>
<li>点击“测试账号”按钮左边第二个按钮，（也就是“-”左边的第一个）获取各种测试用例；</li>
<li>欢迎大家踊跃共享自己的测试用例；</li>
</ol>
<p dir="auto">也可以参考 APIAuto 的文档或视频：</p>
<p dir="auto"><a href="https://github.com/TommyLemon/APIAuto">https://github.com/TommyLemon/APIAuto</a></p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">C-1-3.测试查询</h4><a id="user-content-c-1-3测试查询" class="anchor" aria-label="Permalink: C-1-3.测试查询" href="#c-1-3测试查询"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">为了方便测试，我这里使用的 Chrome 浏览器的 Restlet Client 插件，大家可以根据自己的喜好使用不同的工具测试。</p>
<p dir="auto">使用 <code>http://localhost:8080/get</code> 测试结果。（请注意 DemoApplication.java 中使用 Tomcat 默认的 8080 端口，如果不小心开着PC端的“微信”，8080 端口会被占用，建议改成 8081, 9090 等其它应用程序未占用的端口。）</p>
<p dir="auto">随便找一个表，比如 <code>Moment</code> 表，我们取其中 id 为 12 的一条出来看看</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1542350018926.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1542350018926.png" alt="1542350018926" style="max-width: 100%;"></a></p>
<p dir="auto">对接口地址 <code>http://localhost:8080/get</code> 发送一个 JSON 格式的请求</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1542350219020.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1542350219020.png" alt="1542350219020" style="max-width: 100%;"></a></p>
<p dir="auto">请求的JSON:</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;Moment&quot;: {
    &quot;id&quot;:12
  }
}"><pre>{
  <span class="pl-ent">"Moment"</span>: {
    <span class="pl-ent">"id"</span>:<span class="pl-c1">12</span>
  }
}</pre></div>
<p dir="auto">响应的JSON：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;Moment&quot;: {
        &quot;content&quot;: &quot;1111534034&quot;,
        &quot;date&quot;: &quot;2017-02-08 16:06:11.0&quot;,
        &quot;id&quot;: 12,
        &quot;pictureList&quot;: [
            &quot;http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg&quot;,
            &quot;http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg&quot;
        ],
        &quot;praiseUserIdList&quot;: [
            70793,
            93793,
            82001
        ],
        &quot;userId&quot;: 70793
    },
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre>{
    <span class="pl-ent">"Moment"</span>: {
        <span class="pl-ent">"content"</span>: <span class="pl-s"><span class="pl-pds">"</span>1111534034<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"date"</span>: <span class="pl-s"><span class="pl-pds">"</span>2017-02-08 16:06:11.0<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"id"</span>: <span class="pl-c1">12</span>,
        <span class="pl-ent">"pictureList"</span>: [
            <span class="pl-s"><span class="pl-pds">"</span>http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg<span class="pl-pds">"</span></span>,
            <span class="pl-s"><span class="pl-pds">"</span>http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg<span class="pl-pds">"</span></span>
        ],
        <span class="pl-ent">"praiseUserIdList"</span>: [
            <span class="pl-c1">70793</span>,
            <span class="pl-c1">93793</span>,
            <span class="pl-c1">82001</span>
        ],
        <span class="pl-ent">"userId"</span>: <span class="pl-c1">70793</span>
    },
    <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
    <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">字段过滤</h5><a id="user-content-字段过滤" class="anchor" aria-label="Permalink: 字段过滤" href="#字段过滤"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">这里这么多字段，如果我只想要这个 <code>content</code> 字段的信息怎么办？</p>
<p dir="auto">你可以这样请求：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;Moment&quot;: {
    &quot;id&quot;:12,
    &quot;@column&quot;:&quot;content&quot;
  }
}"><pre>{
  <span class="pl-ent">"Moment"</span>: {
    <span class="pl-ent">"id"</span>:<span class="pl-c1">12</span>,
    <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>content<span class="pl-pds">"</span></span>
  }
}</pre></div>
<p dir="auto">响应：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;Moment&quot;: {
        &quot;content&quot;: &quot;1111534034&quot;
    },
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre>{
    <span class="pl-ent">"Moment"</span>: {
        <span class="pl-ent">"content"</span>: <span class="pl-s"><span class="pl-pds">"</span>1111534034<span class="pl-pds">"</span></span>
    },
    <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
    <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto"><code>@column</code> 表示你要筛选出的字段，如果是多个字段可以这样写 <code>"@column":"id,date,content"</code></p>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">字段别名</h5><a id="user-content-字段别名" class="anchor" aria-label="Permalink: 字段别名" href="#字段别名"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如果想要使用字段的别名应该这样写：<code>"@column":"id,date:time,content:text"</code></p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;Moment&quot;: {
        &quot;text&quot;: &quot;1111534034&quot;,
        &quot;time&quot;: &quot;2017-02-08 16:06:11.0&quot;,
        &quot;id&quot;: 12
    }
}"><pre>{
    <span class="pl-ent">"Moment"</span>: {
        <span class="pl-ent">"text"</span>: <span class="pl-s"><span class="pl-pds">"</span>1111534034<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"time"</span>: <span class="pl-s"><span class="pl-pds">"</span>2017-02-08 16:06:11.0<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"id"</span>: <span class="pl-c1">12</span>
    }
}</pre></div>
<p dir="auto">这样在返回的数据中 <code>date</code> 字段就变成了 <code>time</code>, <code>content</code> 字段变成了 <code>text</code>。</p>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">逻辑运算</h5><a id="user-content-逻辑运算" class="anchor" aria-label="Permalink: 逻辑运算" href="#逻辑运算"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如果想要筛选出，id 在 <code>12,15,32</code> 中的这三条数据的<code>日期</code>和<code>内容</code>怎么办呢？</p>
<p dir="auto">请求：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;id{}&quot;:[12,15,32],
        &quot;@column&quot;:&quot;id,date,content&quot;
      }
  }
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"id{}"</span>:[<span class="pl-c1">12</span>,<span class="pl-c1">15</span>,<span class="pl-c1">32</span>],
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content<span class="pl-pds">"</span></span>
      }
  }
}</pre></div>
<p dir="auto">响应：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;[]&quot;: [
        {
            &quot;Moment&quot;: {
                &quot;content&quot;: &quot;1111534034&quot;,
                &quot;date&quot;: &quot;2017-02-08 16:06:11.0&quot;,
                &quot;id&quot;: 12
            }
        },
        {
            &quot;Moment&quot;: {
                &quot;content&quot;: &quot;APIJSON is a JSON Transmission Structure Protocol…&quot;,
                &quot;date&quot;: &quot;2017-02-08 16:06:11.0&quot;,
                &quot;id&quot;: 15
            }
        },
        {
            &quot;Moment&quot;: {
                &quot;date&quot;: &quot;2017-02-08 16:06:11.0&quot;,
                &quot;id&quot;: 32
            }
        }
    ],
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre>{
    <span class="pl-ent">"[]"</span>: [
        {
            <span class="pl-ent">"Moment"</span>: {
                <span class="pl-ent">"content"</span>: <span class="pl-s"><span class="pl-pds">"</span>1111534034<span class="pl-pds">"</span></span>,
                <span class="pl-ent">"date"</span>: <span class="pl-s"><span class="pl-pds">"</span>2017-02-08 16:06:11.0<span class="pl-pds">"</span></span>,
                <span class="pl-ent">"id"</span>: <span class="pl-c1">12</span>
            }
        },
        {
            <span class="pl-ent">"Moment"</span>: {
                <span class="pl-ent">"content"</span>: <span class="pl-s"><span class="pl-pds">"</span>APIJSON is a JSON Transmission Structure Protocol…<span class="pl-pds">"</span></span>,
                <span class="pl-ent">"date"</span>: <span class="pl-s"><span class="pl-pds">"</span>2017-02-08 16:06:11.0<span class="pl-pds">"</span></span>,
                <span class="pl-ent">"id"</span>: <span class="pl-c1">15</span>
            }
        },
        {
            <span class="pl-ent">"Moment"</span>: {
                <span class="pl-ent">"date"</span>: <span class="pl-s"><span class="pl-pds">"</span>2017-02-08 16:06:11.0<span class="pl-pds">"</span></span>,
                <span class="pl-ent">"id"</span>: <span class="pl-c1">32</span>
            }
        }
    ],
    <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
    <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">如果所要筛选的数据的是在一定范围内的，比如 id 是 300 到 400 之间的</p>
<p dir="auto">你可以这样过滤 <code>"id&amp;{}":"&gt;=300,&lt;=400"</code></p>
<p dir="auto">&amp;的作用是表明后面的两个过滤条件的逻辑关系</p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="(id &gt;= 300 AND id &lt;= 500)"><pre>(id <span class="pl-k">&gt;=</span> <span class="pl-c1">300</span> <span class="pl-k">AND</span> id <span class="pl-k">&lt;=</span> <span class="pl-c1">500</span>)</pre></div>
<p dir="auto">现在的逻辑符号一共有三种，<code>&amp;</code>，<code>|</code>，<code>!</code></p>
<p dir="auto">默认的逻辑关系是 <code>|</code>，也就是说 <code>"id|{}":"&lt;=300,&gt;=400"</code> 和 <code>"id{}":"&lt;=300,&gt;=400"</code> 等价。</p>
<p dir="auto"><code>!</code>主要用于反选，黑名单之类的</p>
<p dir="auto"><code>"id!{}":[12,15,32]</code> 表示 <code>id</code> 不在 12，15，32 内的其他数据。</p>
<p dir="auto">复杂一些，如果多个条件相互组合，可以写多个关于id的过滤条件</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;id&amp;{}&quot;:&quot;&gt;=10,&lt;=40&quot;,
        &quot;id!{}&quot;:[12],
        &quot;@column&quot;:&quot;id,date,content:text&quot;
      }
  }
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"id&amp;{}"</span>:<span class="pl-s"><span class="pl-pds">"</span>&gt;=10,&lt;=40<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"id!{}"</span>:[<span class="pl-c1">12</span>],
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content:text<span class="pl-pds">"</span></span>
      }
  }
}</pre></div>
<p dir="auto">比如这里表示 id 在 10 到 40 之间，但是却不包含 12 的数据。</p>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">模糊查询</h5><a id="user-content-模糊查询" class="anchor" aria-label="Permalink: 模糊查询" href="#模糊查询"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;content$&quot;:&quot;%APIJSON%&quot;,
        &quot;@column&quot;:&quot;id,date,content:text&quot;
      }
  }
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"content$"</span>:<span class="pl-s"><span class="pl-pds">"</span>%APIJSON%<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content:text<span class="pl-pds">"</span></span>
      }
  }
}</pre></div>
<p dir="auto">使用方式有多种：</p>
<p dir="auto"><code>keyword%</code>，以 <code>keyword</code> 开头的字符串。</p>
<p dir="auto"><code>%keyword</code>，以 <code>keyword</code> 结束的字符串。</p>
<p dir="auto"><code>%keyword%</code>，包含 <code>keyword</code> 的字符串，如：<code>keyword123</code>, <code>123keyword</code>, <code>123keyword123</code></p>
<p dir="auto"><code>%k%e%y%</code>，包含字母 <code>k</code>, <code>e</code>, <code>y</code> 的字符串</p>
<p dir="auto">还有几种比较便捷的方式，我们这里如果使用 <code>"content~":"keyword"</code> 来代替 <code>"content$":"%keyword%"</code>，同样可以表示包含某字符串</p>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">正则匹配</h5><a id="user-content-正则匹配" class="anchor" aria-label="Permalink: 正则匹配" href="#正则匹配"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;content~&quot;:&quot;^[0-9]+$&quot;,
        &quot;@column&quot;:&quot;id,date,content:text&quot;
      }
  }
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"content~"</span>:<span class="pl-s"><span class="pl-pds">"</span>^[0-9]+$<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content:text<span class="pl-pds">"</span></span>
      }
  }
}</pre></div>
<p dir="auto">正则表达式 <code>^[0-9]+$</code>，查询 <code>content</code> 为纯数字的数据，<a href="http://www.runoob.com/mysql/mysql-regexp.html" rel="nofollow">MySQL 的正则语法</a> 如下：</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>模式</th>
<th>描述</th>
</tr>
</thead>
<tbody>
<tr>
<td>^</td>
<td>匹配输入字符串的开始位置。如果设置了 RegExp 对象的 Multiline 属性，^ 也匹配 '\n' 或 '\r' 之后的位置。</td>
</tr>
<tr>
<td>$</td>
<td>匹配输入字符串的结束位置。如果设置了RegExp 对象的 Multiline 属性，$ 也匹配 '\n' 或 '\r' 之前的位置。</td>
</tr>
<tr>
<td>.</td>
<td>匹配除 "\n" 之外的任何单个字符。要匹配包括 '\n' 在内的任何字符，请使用象 '[.\n]' 的模式。</td>
</tr>
<tr>
<td>[...]</td>
<td>字符集合。匹配所包含的任意一个字符。例如， '[abc]' 可以匹配 "plain" 中的 'a'。</td>
</tr>
<tr>
<td>[^...]</td>
<td>负值字符集合。匹配未包含的任意字符。例如， '[^abc]' 可以匹配 "plain" 中的'p'。</td>
</tr>
<tr>
<td>p1|p2|p3</td>
<td>匹配 p1 或 p2 或 p3。例如，'z|food' 能匹配 "z" 或 "food"。'(z|f)ood' 则匹配 "zood" 或 "food"。</td>
</tr>
<tr>
<td>*</td>
<td>匹配前面的子表达式零次或多次。例如，zo* 能匹配 "z" 以及 "zoo"。* 等价于{0,}。</td>
</tr>
<tr>
<td>+</td>
<td>匹配前面的子表达式一次或多次。例如，'zo+' 能匹配 "zo" 以及 "zoo"，但不能匹配 "z"。+ 等价于 {1,}。</td>
</tr>
<tr>
<td>{n}</td>
<td>n 是一个非负整数。匹配确定的 n 次。例如，'o{2}' 不能匹配 "Bob" 中的 'o'，但是能匹配 "food" 中的两个 o。</td>
</tr>
<tr>
<td>{n,m}</td>
<td>m 和 n 均为非负整数，其中n &lt;= m。最少匹配 n 次且最多匹配 m 次。</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">列表数据</h5><a id="user-content-列表数据" class="anchor" aria-label="Permalink: 列表数据" href="#列表数据"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">之前我们看到返回的数据是这样的</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;Moment&quot;: {
        &quot;content&quot;: &quot;1111534034&quot;,
        &quot;date&quot;: &quot;2017-02-08 16:06:11.0&quot;,
        &quot;id&quot;: 12,
        &quot;pictureList&quot;: [
            &quot;http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg&quot;,
            &quot;http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg&quot;
        ],
        &quot;praiseUserIdList&quot;: [
            70793,
            93793,
            82001
        ],
        &quot;userId&quot;: 70793
    },
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre>{
    <span class="pl-ent">"Moment"</span>: {
        <span class="pl-ent">"content"</span>: <span class="pl-s"><span class="pl-pds">"</span>1111534034<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"date"</span>: <span class="pl-s"><span class="pl-pds">"</span>2017-02-08 16:06:11.0<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"id"</span>: <span class="pl-c1">12</span>,
        <span class="pl-ent">"pictureList"</span>: [
            <span class="pl-s"><span class="pl-pds">"</span>http://static.oschina.net/uploads/img/201604/22172508_eGDi.jpg<span class="pl-pds">"</span></span>,
            <span class="pl-s"><span class="pl-pds">"</span>http://static.oschina.net/uploads/img/201604/22172507_rrZ5.jpg<span class="pl-pds">"</span></span>
        ],
        <span class="pl-ent">"praiseUserIdList"</span>: [
            <span class="pl-c1">70793</span>,
            <span class="pl-c1">93793</span>,
            <span class="pl-c1">82001</span>
        ],
        <span class="pl-ent">"userId"</span>: <span class="pl-c1">70793</span>
    },
    <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
    <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">里面的 <code>pictureList</code> 和 <code>praiseUserIdList</code> 是数组，这种数据在 MySQL 数据库中是 JSON 数据格式的。</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1542357146401.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1542357146401.png" alt="1542357146401" style="max-width: 100%;"></a></p>
<p dir="auto">数据库里存储的值是这样的</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1542357265371.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1542357265371.png" alt="1542357265371" style="max-width: 100%;"></a></p>
<p dir="auto">如果我们想过滤出里面有 <code>82001</code> 的数据，我们应该这样请求</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;praiseUserIdList&lt;&gt;&quot;:82001,
        &quot;@column&quot;:&quot;id,date,content,praiseUserIdList&quot;
      }
  }
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"praiseUserIdList&lt;&gt;"</span>:<span class="pl-c1">82001</span>,
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content,praiseUserIdList<span class="pl-pds">"</span></span>
      }
  }
}</pre></div>
<p dir="auto">结果是类似这样的，为了显示方便剔除了一些数据。</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;[]&quot;: [ // JavaScript/TypeScript/Python 中可用 data[&quot;[]&quot;] 来提取不符合变量名格式的 key 对应的 value，Java 等可以用 data.getJSONArray(&quot;[]&quot;) 等。
        
        {
            &quot;Moment&quot;: {
                &quot;date&quot;: &quot;2017-02-08 16:06:11.0&quot;,
                &quot;id&quot;: 32,
                &quot;praiseUserIdList&quot;: [
                    38710,
                    82002,
                    82001
                ]
            }
        },
        {
            &quot;Moment&quot;: {
                &quot;content&quot;: &quot;This is a Content...-435&quot;,
                &quot;date&quot;: &quot;2017-02-01 19:14:31.0&quot;,
                &quot;id&quot;: 58,
                &quot;praiseUserIdList&quot;: [
                    38710,
                    82003,
                    82001
                ]
            }
        },
        {
            &quot;Moment&quot;: {
                &quot;content&quot;: &quot;https://gss2.bdstatic.com/-fo3dSag_xIb.jpg&quot;,
                &quot;date&quot;: &quot;2018-10-27 17:58:02.0&quot;,
                &quot;id&quot;: 1540634282433,
                &quot;praiseUserIdList&quot;: [
                    82001
                ]
            }
        }
    ],
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre><span class="pl-kos">{</span>
    <span class="pl-s">"[]"</span>: <span class="pl-kos">[</span> <span class="pl-c">// JavaScript/TypeScript/Python 中可用 data["[]"] 来提取不符合变量名格式的 key 对应的 value，Java 等可以用 data.getJSONArray("[]") 等。</span>
        
        <span class="pl-kos">{</span>
            <span class="pl-s">"Moment"</span>: <span class="pl-kos">{</span>
                <span class="pl-s">"date"</span>: <span class="pl-s">"2017-02-08 16:06:11.0"</span><span class="pl-kos">,</span>
                <span class="pl-s">"id"</span>: <span class="pl-c1">32</span><span class="pl-kos">,</span>
                <span class="pl-s">"praiseUserIdList"</span>: <span class="pl-kos">[</span>
                    <span class="pl-c1">38710</span><span class="pl-kos">,</span>
                    <span class="pl-c1">82002</span><span class="pl-kos">,</span>
                    <span class="pl-c1">82001</span>
                <span class="pl-kos">]</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span><span class="pl-kos">,</span>
        <span class="pl-kos">{</span>
            <span class="pl-s">"Moment"</span>: <span class="pl-kos">{</span>
                <span class="pl-s">"content"</span>: <span class="pl-s">"This is a Content...-435"</span><span class="pl-kos">,</span>
                <span class="pl-s">"date"</span>: <span class="pl-s">"2017-02-01 19:14:31.0"</span><span class="pl-kos">,</span>
                <span class="pl-s">"id"</span>: <span class="pl-c1">58</span><span class="pl-kos">,</span>
                <span class="pl-s">"praiseUserIdList"</span>: <span class="pl-kos">[</span>
                    <span class="pl-c1">38710</span><span class="pl-kos">,</span>
                    <span class="pl-c1">82003</span><span class="pl-kos">,</span>
                    <span class="pl-c1">82001</span>
                <span class="pl-kos">]</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span><span class="pl-kos">,</span>
        <span class="pl-kos">{</span>
            <span class="pl-s">"Moment"</span>: <span class="pl-kos">{</span>
                <span class="pl-s">"content"</span>: <span class="pl-s">"https://gss2.bdstatic.com/-fo3dSag_xIb.jpg"</span><span class="pl-kos">,</span>
                <span class="pl-s">"date"</span>: <span class="pl-s">"2018-10-27 17:58:02.0"</span><span class="pl-kos">,</span>
                <span class="pl-s">"id"</span>: <span class="pl-c1">1540634282433</span><span class="pl-kos">,</span>
                <span class="pl-s">"praiseUserIdList"</span>: <span class="pl-kos">[</span>
                    <span class="pl-c1">82001</span>
                <span class="pl-kos">]</span>
            <span class="pl-kos">}</span>
        <span class="pl-kos">}</span>
    <span class="pl-kos">]</span><span class="pl-kos">,</span>
    <span class="pl-s">"code"</span>: <span class="pl-c1">200</span><span class="pl-kos">,</span>
    <span class="pl-s">"msg"</span>: <span class="pl-s">"success"</span>
<span class="pl-kos">}</span></pre></div>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">分页</h5><a id="user-content-分页" class="anchor" aria-label="Permalink: 分页" href="#分页"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">对于数量太多的数据，我们很多时候都需要分页操作，这时候我们可以用类似下面这样的请求</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;@column&quot;:&quot;id,date,content,praiseUserIdList&quot;
      },
    &quot;page&quot;: 0,
    &quot;count&quot;: 5
  }
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content,praiseUserIdList<span class="pl-pds">"</span></span>
      },
    <span class="pl-ent">"page"</span>: <span class="pl-c1">0</span>,
    <span class="pl-ent">"count"</span>: <span class="pl-c1">5</span>
  }
}</pre></div>
<p dir="auto">请注意，这里的 <code>page</code> 和 <code>count</code> 是放在 <code>[] </code>内的属性，而不是 <code>Moment</code> 对象里。这里 <code>count</code> 表示每页的数量，<code>page</code> 表示第几页，页数从 0 开始算。</p>
<p dir="auto">也许你想看看这个请求对应的SQL语句</p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="SELECT `id`,`date`,`content`,`praiseUserIdList` FROM `sys`.`Moment` LIMIT 5 OFFSET 0"><pre><span class="pl-k">SELECT</span> <span class="pl-s"><span class="pl-pds">`</span>id<span class="pl-pds">`</span></span>,<span class="pl-s"><span class="pl-pds">`</span>date<span class="pl-pds">`</span></span>,<span class="pl-s"><span class="pl-pds">`</span>content<span class="pl-pds">`</span></span>,<span class="pl-s"><span class="pl-pds">`</span>praiseUserIdList<span class="pl-pds">`</span></span> <span class="pl-k">FROM</span> <span class="pl-s"><span class="pl-pds">`</span>sys<span class="pl-pds">`</span></span>.<span class="pl-s"><span class="pl-pds">`</span>Moment<span class="pl-pds">`</span></span> <span class="pl-k">LIMIT</span> <span class="pl-c1">5</span> OFFSET <span class="pl-c1">0</span></pre></div>
<p dir="auto">这里<code>sys</code>是我自己的<code>schema</code>的名字，你的可能会有所不同。</p>
<p dir="auto">如果不想分页的，也提供了一套特殊的查询方式。这种查询方式有三种，请求方式类型这样</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;@column&quot;:&quot;id,date,content,praiseUserIdList&quot;
      },
      &quot;query&quot;: 2
  },
  &quot;total@&quot;:&quot;/[]/total&quot; // key 里的 total 可改成 num 等几乎任意其它名称，还可以用 &quot;info@&quot;: &quot;/[]/info&quot; 获取更详细的分页信息
}"><pre><span class="pl-kos">{</span>
  <span class="pl-s">"[]"</span>: <span class="pl-kos">{</span>
      <span class="pl-s">"Moment"</span>:<span class="pl-kos">{</span>
        <span class="pl-s">"@column"</span>:<span class="pl-s">"id,date,content,praiseUserIdList"</span>
      <span class="pl-kos">}</span><span class="pl-kos">,</span>
      <span class="pl-s">"query"</span>: <span class="pl-c1">2</span>
  <span class="pl-kos">}</span><span class="pl-kos">,</span>
  <span class="pl-s">"total@"</span>:<span class="pl-s">"/[]/total"</span> <span class="pl-c">// key 里的 total 可改成 num 等几乎任意其它名称，还可以用 "info@": "/[]/info" 获取更详细的分页信息</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">这里因为 <code>query</code> 的值是 2，所有会同时查询 <code>Moment</code> 表中的数据和总数。如果是 1 的话，则只会返回当前表的总数：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{&quot;total&quot;:59,&quot;code&quot;:200,&quot;msg&quot;:&quot;success&quot;}"><pre>{<span class="pl-ent">"total"</span>:<span class="pl-c1">59</span>,<span class="pl-ent">"code"</span>:<span class="pl-c1">200</span>,<span class="pl-ent">"msg"</span>:<span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>}</pre></div>
<p dir="auto">数据库中的数量：</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1544515879364.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1544515879364.png" alt="1544515879364" style="max-width: 100%;"></a></p>
<p dir="auto">当然，如果你添加了过滤条件，返回的数量就会是你所过滤的数量，比如：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;@column&quot;:&quot;id,date,content,praiseUserIdList&quot;,
        &quot;praiseUserIdList&lt;&gt;&quot;:38710
      },
      &quot;query&quot;: 1
  },
  &quot;total@&quot;:&quot;/[]/total&quot;
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content,praiseUserIdList<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"praiseUserIdList&lt;&gt;"</span>:<span class="pl-c1">38710</span>
      },
      <span class="pl-ent">"query"</span>: <span class="pl-c1">1</span>
  },
  <span class="pl-ent">"total@"</span>:<span class="pl-s"><span class="pl-pds">"</span>/[]/total<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">返回：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{&quot;total&quot;:12,&quot;code&quot;:200,&quot;msg&quot;:&quot;success&quot;}"><pre>{<span class="pl-ent">"total"</span>:<span class="pl-c1">12</span>,<span class="pl-ent">"code"</span>:<span class="pl-c1">200</span>,<span class="pl-ent">"msg"</span>:<span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>}</pre></div>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">排序</h5><a id="user-content-排序" class="anchor" aria-label="Permalink: 排序" href="#排序"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">要使用排序的话，这样操作</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Moment&quot;:{
        &quot;@column&quot;:&quot;id,date,content,praiseUserIdList&quot;,
        &quot;praiseUserIdList&lt;&gt;&quot;:38710,
        &quot;@order&quot;:&quot;date-,id,content+&quot;
      }
  }
}"><pre>{
  <span class="pl-ent">"[]"</span>: {
      <span class="pl-ent">"Moment"</span>:{
        <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>id,date,content,praiseUserIdList<span class="pl-pds">"</span></span>,
        <span class="pl-ent">"praiseUserIdList&lt;&gt;"</span>:<span class="pl-c1">38710</span>,
        <span class="pl-ent">"@order"</span>:<span class="pl-s"><span class="pl-pds">"</span>date-,id,content+<span class="pl-pds">"</span></span>
      }
  }
}</pre></div>
<p dir="auto"><code>"@order": "date-,id,content+"</code> 其中，字段的前后顺序表示字段排序的优先级。<code>id</code> 和 <code>id+</code> 是等价的，默认就是升序排列。<code>date-</code> 表示将 <code>date</code> 字段降序排列。</p>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">关联查询</h5><a id="user-content-关联查询" class="anchor" aria-label="Permalink: 关联查询" href="#关联查询"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">在讲解关联查询的时候，我们需要先了解下表之间的关系</p>
<p dir="auto">现在有两张表 Moment 和 User，两张表的关系是下面这样</p>
<p dir="auto"><a target="_blank" rel="noopener noreferrer" href="/JunDaTang/APIJSON/blob/master/assets/1545468294295.png"><img src="/JunDaTang/APIJSON/raw/master/assets/1545468294295.png" alt="1545468294295" style="max-width: 100%;"></a></p>
<p dir="auto">MOMENT表示动态，类似微信朋友圈、QQ 空间的动态，每一条动态会有一个发表动态的用户 User，所以 Moment 表里会有一个和 User 表的外键关联：Moment.userId = User.id。</p>
<p dir="auto">对于这样的数据关系，我们在查询动态时，很多时候我们会连带着用户一起查处来，这样又如何操作呢</p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
    &quot;Moment&quot;:{
        &quot;@column&quot;:&quot;id,date,userId&quot;,
        &quot;id&quot;:12 // 注意 id 是主键，这个数组最多返回 1 条子项（如果 id=12 的表记录存在）
    },
    &quot;User&quot;:{
      &quot;id@&quot;:&quot;/Moment/userId&quot;, // 不要求物理外键，只要能关联即可
      &quot;@column&quot;:&quot;id,name&quot;
    }
  }
}"><pre><span class="pl-kos">{</span>
  <span class="pl-s">"[]"</span>: <span class="pl-kos">{</span>
    <span class="pl-s">"Moment"</span>:<span class="pl-kos">{</span>
        <span class="pl-s">"@column"</span>:<span class="pl-s">"id,date,userId"</span><span class="pl-kos">,</span>
        <span class="pl-s">"id"</span>:<span class="pl-c1">12</span> <span class="pl-c">// 注意 id 是主键，这个数组最多返回 1 条子项（如果 id=12 的表记录存在）</span>
    <span class="pl-kos">}</span><span class="pl-kos">,</span>
    <span class="pl-s">"User"</span>:<span class="pl-kos">{</span>
      <span class="pl-s">"id@"</span>:<span class="pl-s">"/Moment/userId"</span><span class="pl-kos">,</span> <span class="pl-c">// 不要求物理外键，只要能关联即可</span>
      <span class="pl-s">"@column"</span>:<span class="pl-s">"id,name"</span>
    <span class="pl-kos">}</span>
  <span class="pl-kos">}</span>
<span class="pl-kos">}</span></pre></div>
<p dir="auto">这个请求稍微复杂点，首先我们用 <code>[]</code> 对象表示我们是想查询出一个列表，这个列表包含两个部分 <code>Moment</code> 和 <code>User</code>。</p>
<p dir="auto">其中 <code>Moment</code> 是我们想要查询的主要内容，它的写法也和一般查询数据时无异。</p>
<p dir="auto"><code>User</code> 是与 <code>Moment</code> 相关联的数据，所以查询的时候我们需要用 <code>id@</code> 来表示他们之间的关联关系</p>
<p dir="auto"><code>/Moment/userId</code> 中，最开始的 <code>/</code> 相当于是指明了 <code>[]</code> 的位置，<code>/Moment</code> 表示 <code>[]</code> 对象下的 <code>Moemnt</code> 对象，<code>/Moment/userId</code> 表示 <code>Moment</code> 的 <code>userId</code> 字段是与 <code>User</code> 的 <code>id</code> 关联的。这是一种缺省引用路径，这里等价于完整引用路径 <code>[]/Moment/userId</code>。</p>
<p dir="auto">响应的数据：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;[]&quot;: [
        {
            &quot;Moment&quot;: {
                &quot;date&quot;: &quot;2017-02-08 16:06:11.0&quot;,
                &quot;id&quot;: 12,
                &quot;userId&quot;: 70793
            },
            &quot;User&quot;: {
                &quot;id&quot;: 70793,
                &quot;name&quot;: &quot;Strong&quot;
            }
        }
    ],
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre>{
    <span class="pl-ent">"[]"</span>: [
        {
            <span class="pl-ent">"Moment"</span>: {
                <span class="pl-ent">"date"</span>: <span class="pl-s"><span class="pl-pds">"</span>2017-02-08 16:06:11.0<span class="pl-pds">"</span></span>,
                <span class="pl-ent">"id"</span>: <span class="pl-c1">12</span>,
                <span class="pl-ent">"userId"</span>: <span class="pl-c1">70793</span>
            },
            <span class="pl-ent">"User"</span>: {
                <span class="pl-ent">"id"</span>: <span class="pl-c1">70793</span>,
                <span class="pl-ent">"name"</span>: <span class="pl-s"><span class="pl-pds">"</span>Strong<span class="pl-pds">"</span></span>
            }
        }
    ],
    <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
    <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">分组查询</h5><a id="user-content-分组查询" class="anchor" aria-label="Permalink: 分组查询" href="#分组查询"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">在了解分组查询之前，我们需要先了解下 APIJSON 所支持的部分常见函数：</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>函数名</th>
<th>说明</th>
</tr>
</thead>
<tbody>
<tr>
<td>count</td>
<td>统计分组下，某字段的个数</td>
</tr>
<tr>
<td>sum</td>
<td>统计分组下，某字段的和</td>
</tr>
<tr>
<td>max</td>
<td>统计分组下，某字段的最大值</td>
</tr>
<tr>
<td>min</td>
<td>统计分组下，某字段的最小值</td>
</tr>
<tr>
<td>avg</td>
<td>统计分组下，某字段的平均值</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">具体见 AbstractSQLConfig 中 SQL_FUNCTION_MAP 配置的所有 SQL 函数 ：</p>
<p dir="auto"><a href="https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L286-L765">https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/AbstractSQLConfig.java#L286-L765</a></p>
<p dir="auto">比如，如果只是单纯的查出最大值，这样请求就可以了</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;Moment&quot;:{
     &quot;@column&quot;:&quot;max(id):maxid&quot;
  }
}"><pre>{
  <span class="pl-ent">"Moment"</span>:{
     <span class="pl-ent">"@column"</span>:<span class="pl-s"><span class="pl-pds">"</span>max(id):maxid<span class="pl-pds">"</span></span>
  }
}</pre></div>
<p dir="auto">响应：</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;Moment&quot;: {
     &quot;maxid&quot;: 1541912160047
  },
  &quot;code&quot;: 200,
  &quot;msg&quot;: &quot;success&quot;
}"><pre>{
  <span class="pl-ent">"Moment"</span>: {
     <span class="pl-ent">"maxid"</span>: <span class="pl-c1">1541912160047</span>
  },
  <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
  <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">这里 <code>maxid</code> 是我们取的别名</p>
<p dir="auto">如果是有分组条件的，那我们需要使用 <code>@group</code></p>
<p dir="auto">比如，像下面 Sale 表，这张表表示，2018年1月1日某公司门下的 3 个店铺（store_id）的营业额（amt）数据</p>
<markdown-accessiblity-table><table>
<thead>
<tr>
<th>id</th>
<th>store_id</th>
<th>amt</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>1</td>
<td>100</td>
</tr>
<tr>
<td>2</td>
<td>1</td>
<td>80</td>
</tr>
<tr>
<td>3</td>
<td>2</td>
<td>30</td>
</tr>
<tr>
<td>4</td>
<td>2</td>
<td>100</td>
</tr>
<tr>
<td>5</td>
<td>3</td>
<td>210</td>
</tr>
</tbody>
</table></markdown-accessiblity-table>
<p dir="auto">如果，我们想要计算出这天每个店铺一共卖了多少，我们通过 APIJSON 可以这样查询</p>
<div class="snippet-clipboard-content notranslate position-relative overflow-auto" data-snippet-clipboard-copy-content="{
  &quot;[]&quot;: {
      &quot;Sale&quot;:{
        &quot;@column&quot;:&quot;store_id;sum(amt):totAmt&quot;, // 注意 SQL 函数要用分号 ; 隔开
        &quot;@group&quot;:&quot;store_id&quot;
      }
  }
}"><pre class="notranslate"><code>{
  "[]": {
      "Sale":{
        "@column":"store_id;sum(amt):totAmt", // 注意 SQL 函数要用分号 ; 隔开
        "@group":"store_id"
      }
  }
}
</code></pre></div>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">C-1-4.登录</h4><a id="user-content-c-1-4登录" class="anchor" aria-label="Permalink: C-1-4.登录" href="#c-1-4登录"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">如果没有登录，由于权限的限制，是需要登录的。</p>
<p dir="auto">登录地址 <code>http://localhost:8080/login</code> 或 <code>http://127.0.0.1:8080/login</code>，发送请求</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
  &quot;phone&quot;: &quot;13000038710&quot;,
  &quot;password&quot;:&quot;apijson&quot;
}"><pre>{
  <span class="pl-ent">"phone"</span>: <span class="pl-s"><span class="pl-pds">"</span>13000038710<span class="pl-pds">"</span></span>,
  <span class="pl-ent">"password"</span>:<span class="pl-s"><span class="pl-pds">"</span>apijson<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">账号和密码，可以到 <code>apijson_privacy</code> 里面查询</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">C-1-5.测试新增</h4><a id="user-content-c-1-5测试新增" class="anchor" aria-label="Permalink: C-1-5.测试新增" href="#c-1-5测试新增"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">接口地址：<code>http://localhost:8080/post</code></p>
<p dir="auto">我们想新增一条备注时，发送这样的请求</p>
<p dir="auto">请求</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
 &quot;Moment&quot;:{
      &quot;content&quot;:&quot;今天天气不错，到处都是提拉米苏雪&quot;,
      &quot;userId&quot;:38710
 },
  &quot;tag&quot;:&quot;Moment&quot;
}"><pre>{
 <span class="pl-ent">"Moment"</span>:{
      <span class="pl-ent">"content"</span>:<span class="pl-s"><span class="pl-pds">"</span>今天天气不错，到处都是提拉米苏雪<span class="pl-pds">"</span></span>,
      <span class="pl-ent">"userId"</span>:<span class="pl-c1">38710</span>
 },
  <span class="pl-ent">"tag"</span>:<span class="pl-s"><span class="pl-pds">"</span>Moment<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto"><code>tag</code> 是我们在 <code>Request</code> 表里面配置的 <code>tag</code> 字段。</p>
<p dir="auto">响应</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;Moment&quot;: {
        &quot;code&quot;: 200,
        &quot;count&quot;: 1,
        &quot;id&quot;: 1544520921923,
        &quot;msg&quot;: &quot;success&quot;
    },
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre>{
    <span class="pl-ent">"Moment"</span>: {
        <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
        <span class="pl-ent">"count"</span>: <span class="pl-c1">1</span>,
        <span class="pl-ent">"id"</span>: <span class="pl-c1">1544520921923</span>,
        <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
    },
    <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
    <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">返回的 <code>id</code> 是新增的数据的新主键值</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">C-1-4.测试修改</h4><a id="user-content-c-1-4测试修改" class="anchor" aria-label="Permalink: C-1-4.测试修改" href="#c-1-4测试修改"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">接口地址：<code>http://localhost:8080/put</code></p>
<p dir="auto">修改备注和新增类似</p>
<p dir="auto">请求</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
 &quot;Moment&quot;:{
      &quot;id&quot;:1544520921923,
      &quot;content&quot;:&quot;海洋动物数量减少，如果非吃不可，不点杀也是在保护它们&quot;
 },
  &quot;tag&quot;:&quot;Moment&quot;
}"><pre>{
 <span class="pl-ent">"Moment"</span>:{
      <span class="pl-ent">"id"</span>:<span class="pl-c1">1544520921923</span>,
      <span class="pl-ent">"content"</span>:<span class="pl-s"><span class="pl-pds">"</span>海洋动物数量减少，如果非吃不可，不点杀也是在保护它们<span class="pl-pds">"</span></span>
 },
  <span class="pl-ent">"tag"</span>:<span class="pl-s"><span class="pl-pds">"</span>Moment<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">响应</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
    &quot;Moment&quot;: {
        &quot;code&quot;: 200,
        &quot;count&quot;: 1,
        &quot;id&quot;: 1544520921923,
        &quot;msg&quot;: &quot;success&quot;
    },
    &quot;code&quot;: 200,
    &quot;msg&quot;: &quot;success&quot;
}"><pre>{
    <span class="pl-ent">"Moment"</span>: {
        <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
        <span class="pl-ent">"count"</span>: <span class="pl-c1">1</span>,
        <span class="pl-ent">"id"</span>: <span class="pl-c1">1544520921923</span>,
        <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
    },
    <span class="pl-ent">"code"</span>: <span class="pl-c1">200</span>,
    <span class="pl-ent">"msg"</span>: <span class="pl-s"><span class="pl-pds">"</span>success<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">如果要对 <code>json</code> 类型操作的话，这样请求</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
 &quot;Moment&quot;:{
      &quot;id&quot;:1544520921923,
      &quot;praiseUserIdList+&quot;: [123]
 },
  &quot;tag&quot;:&quot;Moment&quot;
}"><pre>{
 <span class="pl-ent">"Moment"</span>:{
      <span class="pl-ent">"id"</span>:<span class="pl-c1">1544520921923</span>,
      <span class="pl-ent">"praiseUserIdList+"</span>: [<span class="pl-c1">123</span>]
 },
  <span class="pl-ent">"tag"</span>:<span class="pl-s"><span class="pl-pds">"</span>Moment<span class="pl-pds">"</span></span>
}</pre></div>
<p dir="auto">这里的 <code>praiseUserIdList</code> 是一个 <code>json</code> 类型的字段，在操作之前它是空的 <code>[]</code>，提交以后它是 <code>[123]</code>，如果再添加一个 21，则会变成 <code>[123,21]</code></p>
<p dir="auto">要删除其中的值，把 <code>+</code> 变成 <code>-</code> 即可。如果没有 <code>+</code>, <code>-</code> 符号，"praiseUserIdList": [123] 将直接替换原本的值，可能丢失数据。</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">C-1-5.测试删除</h4><a id="user-content-c-1-5测试删除" class="anchor" aria-label="Permalink: C-1-5.测试删除" href="#c-1-5测试删除"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">接口地址：<code>http://localhost:8080/delete</code></p>
<p dir="auto">请求</p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="{
 &quot;Moment&quot;:{
      &quot;id&quot;:1544520921923
 },
  &quot;tag&quot;:&quot;Moment&quot;
}"><pre>{
 <span class="pl-ent">"Moment"</span>:{
      <span class="pl-ent">"id"</span>:<span class="pl-c1">1544520921923</span>
 },
  <span class="pl-ent">"tag"</span>:<span class="pl-s"><span class="pl-pds">"</span>Moment<span class="pl-pds">"</span></span>
}</pre></div>
<div class="markdown-heading" dir="auto"><h3 tabindex="-1" class="heading-element" dir="auto">C-2.新增接口</h3><a id="user-content-c-2新增接口" class="anchor" aria-label="Permalink: C-2.新增接口" href="#c-2新增接口"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">1. 后台添加数据表</h4><a id="user-content-1-后台添加数据表" class="anchor" aria-label="Permalink: 1. 后台添加数据表" href="#1-后台添加数据表"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">在自己的数据库里新增一个表，比如我这里新增 <code>b_stone</code></p>
<div class="highlight highlight-source-sql notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="-- 原石
CREATE TABLE `b_stone` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `cost` int(10) NULL COMMENT '成本',
  `price` int(10) NULL COMMENT '卖价',
  `length` int(10) NULL,
  `width`  int(10) NULL,
  `height` int(10) NULL,
  `weight` float(8,1) NULL,
  `creationdate` datetime default CURRENT_TIMESTAMP COMMENT '创建时间',
  `modifydate` timestamp DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间',
  `modifier` varchar(80) NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;"><pre><span class="pl-c"><span class="pl-c">--</span> 原石</span>
<span class="pl-k">CREATE</span> <span class="pl-k">TABLE</span> `<span class="pl-en">b_stone</span>` (
  <span class="pl-s"><span class="pl-pds">`</span>id<span class="pl-pds">`</span></span> <span class="pl-k">bigint</span>(<span class="pl-c1">20</span>) <span class="pl-k">NOT NULL</span> AUTO_INCREMENT,
  <span class="pl-s"><span class="pl-pds">`</span>cost<span class="pl-pds">`</span></span> <span class="pl-k">int</span>(<span class="pl-c1">10</span>) <span class="pl-k">NULL</span> COMMENT <span class="pl-s"><span class="pl-pds">'</span>成本<span class="pl-pds">'</span></span>,
  <span class="pl-s"><span class="pl-pds">`</span>price<span class="pl-pds">`</span></span> <span class="pl-k">int</span>(<span class="pl-c1">10</span>) <span class="pl-k">NULL</span> COMMENT <span class="pl-s"><span class="pl-pds">'</span>卖价<span class="pl-pds">'</span></span>,
  <span class="pl-s"><span class="pl-pds">`</span>length<span class="pl-pds">`</span></span> <span class="pl-k">int</span>(<span class="pl-c1">10</span>) <span class="pl-k">NULL</span>,
  <span class="pl-s"><span class="pl-pds">`</span>width<span class="pl-pds">`</span></span>  <span class="pl-k">int</span>(<span class="pl-c1">10</span>) <span class="pl-k">NULL</span>,
  <span class="pl-s"><span class="pl-pds">`</span>height<span class="pl-pds">`</span></span> <span class="pl-k">int</span>(<span class="pl-c1">10</span>) <span class="pl-k">NULL</span>,
  <span class="pl-s"><span class="pl-pds">`</span>weight<span class="pl-pds">`</span></span> float(<span class="pl-c1">8</span>,<span class="pl-c1">1</span>) <span class="pl-k">NULL</span>,
  <span class="pl-s"><span class="pl-pds">`</span>creationdate<span class="pl-pds">`</span></span> datetime default <span class="pl-c1">CURRENT_TIMESTAMP</span> COMMENT <span class="pl-s"><span class="pl-pds">'</span>创建时间<span class="pl-pds">'</span></span>,
  <span class="pl-s"><span class="pl-pds">`</span>modifydate<span class="pl-pds">`</span></span> <span class="pl-k">timestamp</span> DEFAULT <span class="pl-c1">CURRENT_TIMESTAMP</span> <span class="pl-k">ON</span> <span class="pl-k">UPDATE</span> <span class="pl-c1">CURRENT_TIMESTAMP</span> COMMENT <span class="pl-s"><span class="pl-pds">'</span>修改时间<span class="pl-pds">'</span></span>,
  <span class="pl-s"><span class="pl-pds">`</span>modifier<span class="pl-pds">`</span></span> <span class="pl-k">varchar</span>(<span class="pl-c1">80</span>) <span class="pl-k">NULL</span>,
  <span class="pl-k">PRIMARY KEY</span> (<span class="pl-s"><span class="pl-pds">`</span>id<span class="pl-pds">`</span></span>)
) ENGINE<span class="pl-k">=</span>InnoDB DEFAULT CHARSET<span class="pl-k">=</span>utf8;</pre></div>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">2. 配置权限</h4><a id="user-content-2-配置权限" class="anchor" aria-label="Permalink: 2. 配置权限" href="#2-配置权限"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto">APIJSON 3.7.0  版开始，依赖了 apijson-framework.jar 的不需要写任何代码：</p>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto">2.1）在 Access 表里加一行记录即可</h5><a id="user-content-21在-access-表里加一行记录即可" class="anchor" aria-label="Permalink: 2.1）在 Access 表里加一行记录即可" href="#21在-access-表里加一行记录即可"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_access_config-small.jpg"><img src="https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_access_config-small.jpg" alt="" style="max-width: 100%;"></a></p>
<br>
<br>
<p dir="auto"><del>如果低于 3.7.0 或者未依赖 apijson-framework.jar，而是直接依赖 apijson-orm.jar，则需要编写代码：</del></p>
<div class="markdown-heading" dir="auto"><h5 tabindex="-1" class="heading-element" dir="auto"><del>2.1）在 Model 中添加对象并配置权限</del></h5><a id="user-content-21在-model-中添加对象并配置权限" class="anchor" aria-label="Permalink: 2.1）在 Model 中添加对象并配置权限" href="#21在-model-中添加对象并配置权限"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><del>项目的 model 目录下，新增一个类</del></p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="package apijson.demo.server.model;

import zuo.biao.apijson.MethodAccess;

@MethodAccess
public class Stone {
}"><pre><span class="pl-k">package</span> <span class="pl-s1">apijson</span>.<span class="pl-s1">demo</span>.<span class="pl-s1">server</span>.<span class="pl-s1">model</span>;

<span class="pl-k">import</span> <span class="pl-s1">zuo</span>.<span class="pl-s1">biao</span>.<span class="pl-s1">apijson</span>.<span class="pl-s1">MethodAccess</span>;

<span class="pl-c1">@</span><span class="pl-c1">MethodAccess</span>
<span class="pl-k">public</span> <span class="pl-k">class</span> <span class="pl-smi">Stone</span> {
}</pre></div>
<p dir="auto"><del>注解<code>@MethodAccess</code>的配置，可以参考其他类</del></p>
<p dir="auto"><del>由于我们的类名和数据库表名不一致，需要注册一下。如果一样就不需要了。</del></p>
<p dir="auto"><del>设置数据库的实际表名 <code>DemoSQLConfig</code>，38 行</del></p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="//表名映射，隐藏真实表名，对安全要求很高的表可以这么做
	static {
		TABLE_KEY_MAP.put(User.class.getSimpleName(), &quot;apijson_user&quot;);
		TABLE_KEY_MAP.put(Privacy.class.getSimpleName(), &quot;apijson_privacy&quot;);
		TABLE_KEY_MAP.put(Stone.class.getSimpleName(), &quot;b_stone&quot;); // &lt;--这一句
	}"><pre><span class="pl-c">//表名映射，隐藏真实表名，对安全要求很高的表可以这么做</span>
	<span class="pl-k">static</span> {
		<span class="pl-c1">TABLE_KEY_MAP</span>.<span class="pl-en">put</span>(<span class="pl-smi">User</span>.<span class="pl-k">class</span>.<span class="pl-en">getSimpleName</span>(), <span class="pl-s">"apijson_user"</span>);
		<span class="pl-c1">TABLE_KEY_MAP</span>.<span class="pl-en">put</span>(<span class="pl-smi">Privacy</span>.<span class="pl-k">class</span>.<span class="pl-en">getSimpleName</span>(), <span class="pl-s">"apijson_privacy"</span>);
		<span class="pl-c1">TABLE_KEY_MAP</span>.<span class="pl-en">put</span>(<span class="pl-smi">Stone</span>.<span class="pl-k">class</span>.<span class="pl-en">getSimpleName</span>(), <span class="pl-s">"b_stone"</span>); <span class="pl-c">// &lt;--这一句</span>
	}</pre></div>
<p dir="auto"><del>注册权限是必须的，这样程序才能使用你配置的类权限去管理你的接口</del></p>
<p dir="auto"><del>脚本 <code>DemoVerifier.java</code> 的 48 行</del></p>
<div class="highlight highlight-source-java notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="static { //注册权限
		ACCESS_MAP.put(User.class.getSimpleName(), getAccessMap(User.class.getAnnotation(MethodAccess.class)));
....
		ACCESS_MAP.put(Stone.class.getSimpleName(), getAccessMap(Stone.class.getAnnotation(MethodAccess.class)));
	}"><pre><span class="pl-k">static</span> { <span class="pl-c">//注册权限</span>
		<span class="pl-c1">ACCESS_MAP</span>.<span class="pl-en">put</span>(<span class="pl-smi">User</span>.<span class="pl-k">class</span>.<span class="pl-en">getSimpleName</span>(), <span class="pl-en">getAccessMap</span>(<span class="pl-smi">User</span>.<span class="pl-k">class</span>.<span class="pl-en">getAnnotation</span>(<span class="pl-smi">MethodAccess</span>.<span class="pl-k">class</span>)));
....
		<span class="pl-c1">ACCESS_MAP</span>.<span class="pl-en">put</span>(<span class="pl-smi">Stone</span>.<span class="pl-k">class</span>.<span class="pl-en">getSimpleName</span>(), <span class="pl-en">getAccessMap</span>(<span class="pl-smi">Stone</span>.<span class="pl-k">class</span>.<span class="pl-en">getAnnotation</span>(<span class="pl-smi">MethodAccess</span>.<span class="pl-k">class</span>)));
	}</pre></div>
<br>
<br>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">3. 接口管理Request表的配置</h4><a id="user-content-3-接口管理request表的配置" class="anchor" aria-label="Permalink: 3. 接口管理Request表的配置" href="#3-接口管理request表的配置"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a target="_blank" rel="noopener noreferrer nofollow" href="https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_request_config-small.jpg"><img src="https://raw.githubusercontent.com/TommyLemon/StaticResources/master/APIJSON/APIJSON_request_config-small.jpg" alt="" style="max-width: 100%;"></a>
可这样设置 structure 字段来配置自动校验请求 JSON 参数： <br></p>
<div class="highlight highlight-source-json notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="&quot;VERIFY&quot;:{
  &quot;type{}&quot;:[0,1,2]
}"><pre><span class="pl-ent">"VERIFY"</span>:{
  <span class="pl-ent">"type{}"</span>:[<span class="pl-c1">0</span>,<span class="pl-c1">1</span>,<span class="pl-c1">2</span>]
}</pre></div>
<p dir="auto">就能校验 type 的值是不是 0，1，2 中的一个。<br>
还有 <br></p>
<div class="highlight highlight-source-js notranslate position-relative overflow-auto" dir="auto" data-snippet-clipboard-copy-content="&quot;VERIFY&quot;: { &quot;money&amp;{}&quot;:&quot;&gt;0,&lt;=10000&quot; }              //自动验证是否 money&gt;0 &amp; money&lt;=10000
&quot;TYPE&quot;: { &quot;balance&quot;: &quot;DECIMAL&quot; }                    //自动验证 balance 类型是否为 DECIMAL（对应 Double 双精度浮点数）
&quot;UNIQUE&quot;: &quot;phone&quot;                                  //强制 phone 的值为数据库中没有的
&quot;NECESSARY&quot;: &quot;id,name&quot;                             //强制传 id,name 两个字段
&quot;DISALLOW&quot;: &quot;balance&quot;                              //禁止传 balance 字段
&quot;INSERT&quot;: { &quot;@role&quot;: &quot;OWNER&quot; }                     //如果没传 @role 就自动添加
&quot;UPDATE&quot;: { &quot;id@&quot;: &quot;User/id&quot; }                     //强制放入键值对"><pre><span class="pl-s">"VERIFY"</span>: <span class="pl-kos">{</span> <span class="pl-s">"money&amp;{}"</span>:<span class="pl-s">"&gt;0,&lt;=10000"</span> <span class="pl-kos">}</span>              <span class="pl-c">//自动验证是否 money&gt;0 &amp; money&lt;=10000</span>
<span class="pl-s">"TYPE"</span>: <span class="pl-kos">{</span> <span class="pl-s">"balance"</span>: <span class="pl-s">"DECIMAL"</span> <span class="pl-kos">}</span>                    <span class="pl-c">//自动验证 balance 类型是否为 DECIMAL（对应 Double 双精度浮点数）</span>
<span class="pl-s">"UNIQUE"</span>: <span class="pl-s">"phone"</span>                                  <span class="pl-c">//强制 phone 的值为数据库中没有的</span>
<span class="pl-s">"NECESSARY"</span>: <span class="pl-s">"id,name"</span>                             <span class="pl-c">//强制传 id,name 两个字段</span>
<span class="pl-s">"DISALLOW"</span>: <span class="pl-s">"balance"</span>                              <span class="pl-c">//禁止传 balance 字段</span>
<span class="pl-s">"INSERT"</span>: <span class="pl-kos">{</span> <span class="pl-s">"@role"</span>: <span class="pl-s">"OWNER"</span> <span class="pl-kos">}</span>                     <span class="pl-c">//如果没传 @role 就自动添加</span>
<span class="pl-s">"UPDATE"</span>: <span class="pl-kos">{</span> <span class="pl-s">"id@"</span>: <span class="pl-s">"User/id"</span> <span class="pl-kos">}</span>                     <span class="pl-c">//强制放入键值对</span></pre></div>
<p dir="auto">全部操作符见 <a href="https://github.com/Tencent/APIJSON/blob/master/APIJSONORM/src/main/java/apijson/orm/Operation.java">Operation.java</a> 的注释
<br>
<br></p>
<p dir="auto">🌛此处的介绍都只是简要介绍，只是为了引导刚刚接触 APIJSON 的道友快速了解 APIJSON，并不代表 APIJSON 只有这些功能，具体功能详情参考下列图表</p>
<div class="markdown-heading" dir="auto"><h4 tabindex="-1" class="heading-element" dir="auto">4. 完整功能图表</h4><a id="user-content-4-完整功能图表" class="anchor" aria-label="Permalink: 4. 完整功能图表" href="#4-完整功能图表"><svg data-component="Octicon" class="octicon octicon-link" viewBox="0 0 16 16" version="1.1" width="16" height="16" aria-hidden="true"><path d="m7.775 3.275 1.25-1.25a3.5 3.5 0 1 1 4.95 4.95l-2.5 2.5a3.5 3.5 0 0 1-4.95 0 .751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018 1.998 1.998 0 0 0 2.83 0l2.5-2.5a2.002 2.002 0 0 0-2.83-2.83l-1.25 1.25a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042Zm-4.69 9.64a1.998 1.998 0 0 0 2.83 0l1.25-1.25a.751.751 0 0 1 1.042.018.751.751 0 0 1 .018 1.042l-1.25 1.25a3.5 3.5 0 1 1-4.95-4.95l2.5-2.5a3.5 3.5 0 0 1 4.95 0 .751.751 0 0 1-.018 1.042.751.751 0 0 1-1.042.018 1.998 1.998 0 0 0-2.83 0l-2.5 2.5a1.998 1.998 0 0 0 0 2.83Z"></path></svg></a></div>
<p dir="auto"><a href="https://github.com/Tencent/APIJSON/blob/master/Document.md#3">https://github.com/Tencent/APIJSON/blob/master/Document.md#3</a></p>
</article></div><div class="d-none"></div></section></div></div></div> </div> <!-- --> </div></div></div></div></div></div><div class="ScrollMarksContainer-module__scrollMarksContainer__Eu7uU" id="find-result-marks-container"></div><div class="d-none"></div><div class="d-none"></div></div> <!-- --> <!-- --> </div>
</react-app>




  </div>

</turbo-frame>

    </main>
  </div>

  </div>

          <footer class="footer f6 color-fg-muted color-border-subtle tmp-pt-7 tmp-pb-6 p-responsive" role="contentinfo"  >
  <h2 class='sr-only'>Footer</h2>

  


  <div class="d-flex flex-justify-center flex-items-center flex-column-reverse flex-lg-row flex-wrap flex-lg-nowrap">
    <div class="d-flex flex-items-center flex-shrink-0 mx-2">
      <a aria-label="GitHub Homepage" class="footer-octicon mr-2" href="https://github.com">
        <svg aria-hidden="true" data-component="Octicon" height="24" viewBox="0 0 24 24" version="1.1" width="24" data-view-component="true" class="octicon octicon-mark-github">
    <path d="M10.226 17.284c-2.965-.36-5.054-2.493-5.054-5.256 0-1.123.404-2.336 1.078-3.144-.292-.741-.247-2.314.09-2.965.898-.112 2.111.36 2.83 1.01.853-.269 1.752-.404 2.853-.404 1.1 0 1.999.135 2.807.382.696-.629 1.932-1.1 2.83-.988.315.606.36 2.179.067 2.942.72.854 1.101 2 1.101 3.167 0 2.763-2.089 4.852-5.098 5.234.763.494 1.28 1.572 1.28 2.807v2.336c0 .674.561 1.056 1.235.786 4.066-1.55 7.255-5.615 7.255-10.646C23.5 6.188 18.334 1 11.978 1 5.62 1 .5 6.188.5 12.545c0 4.986 3.167 9.12 7.435 10.669.606.225 1.19-.18 1.19-.786V20.63a2.9 2.9 0 0 1-1.078.224c-1.483 0-2.359-.808-2.987-2.313-.247-.607-.517-.966-1.034-1.033-.27-.023-.359-.135-.359-.27 0-.27.45-.471.898-.471.652 0 1.213.404 1.797 1.235.45.651.921.943 1.483.943.561 0 .92-.202 1.437-.719.382-.381.674-.718.944-.943"></path>
</svg>
</a>
      <span>
        &copy; 2026 GitHub,&nbsp;Inc.
      </span>
    </div>

    <nav aria-label="Footer">
      <h3 class="sr-only" id="sr-footer-heading">Footer navigation</h3>

      <ul class="list-style-none d-flex flex-justify-center flex-wrap mb-2 mb-lg-0" aria-labelledby="sr-footer-heading">


          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to Terms&quot;,&quot;label&quot;:&quot;text:terms&quot;}" href="https://docs.github.com/site-policy/github-terms/github-terms-of-service" data-view-component="true" class="Link--secondary Link">Terms</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to privacy&quot;,&quot;label&quot;:&quot;text:privacy&quot;}" href="https://docs.github.com/site-policy/privacy-policies/github-privacy-statement" data-view-component="true" class="Link--secondary Link">Privacy</a>
          </li>


            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to security&quot;,&quot;label&quot;:&quot;text:security&quot;}" href="https://github.com/security" data-view-component="true" class="Link--secondary Link">Security</a>
            </li>

            <li class="mx-2">
              <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to status&quot;,&quot;label&quot;:&quot;text:status&quot;}" href="https://www.githubstatus.com/" data-view-component="true" class="Link--secondary Link">Status</a>
            </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to community&quot;,&quot;label&quot;:&quot;text:community&quot;}" href="https://github.community/" data-view-component="true" class="Link--secondary Link">Community</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to docs&quot;,&quot;label&quot;:&quot;text:docs&quot;}" href="https://docs.github.com/" data-view-component="true" class="Link--secondary Link">Docs</a>
          </li>

          <li class="mx-2">
            <a data-analytics-event="{&quot;category&quot;:&quot;Footer&quot;,&quot;action&quot;:&quot;go to contact&quot;,&quot;label&quot;:&quot;text:contact&quot;}" href="https://support.github.com?tags=dotcom-footer" data-view-component="true" class="Link--secondary Link">Contact</a>
          </li>

          
<li class="mx-2" >
  <cookie-consent-link>
    <button
      type="button"
      class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent"
      data-action="click:cookie-consent-link#showConsentManagement"
      data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;cookies&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;cookies_link_subfooter_footer&quot;}"
    >
      Manage cookies
    </button>
  </cookie-consent-link>
</li>

  <li class="mx-2">
    <cookie-consent-link>
      <button
        type="button"
        class="Link--secondary underline-on-hover border-0 p-0 color-bg-transparent text-left"
        data-action="click:cookie-consent-link#showConsentManagement"
        data-analytics-event="{&quot;location&quot;:&quot;footer&quot;,&quot;action&quot;:&quot;dont_share_info&quot;,&quot;context&quot;:&quot;subfooter&quot;,&quot;tag&quot;:&quot;link&quot;,&quot;label&quot;:&quot;dont_share_info_link_subfooter_footer&quot;}"
      >
        Do not share my personal information
      </button>
    </cookie-consent-link>
  </li>

      </ul>
    </nav>
  </div>
</footer>



    <ghcc-consent id="ghcc" class="position-fixed bottom-0 left-0" style="z-index: 999999"
      data-locale="en"
      data-initial-cookie-consent-allowed=""
      data-cookie-consent-required="true"
    ></ghcc-consent>




  <div id="ajax-error-message" class="ajax-error-message flash flash-error" hidden>
    <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-alert">
    <path d="M6.457 1.047c.659-1.234 2.427-1.234 3.086 0l6.082 11.378A1.75 1.75 0 0 1 14.082 15H1.918a1.75 1.75 0 0 1-1.543-2.575Zm1.763.707a.25.25 0 0 0-.44 0L1.698 13.132a.25.25 0 0 0 .22.368h12.164a.25.25 0 0 0 .22-.368Zm.53 3.996v2.5a.75.75 0 0 1-1.5 0v-2.5a.75.75 0 0 1 1.5 0ZM9 11a1 1 0 1 1-2 0 1 1 0 0 1 2 0Z"></path>
</svg>
    <button type="button" class="flash-close js-ajax-error-dismiss" aria-label="Dismiss error">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
    </button>
    You can’t perform that action at this time.
  </div>

    <template id="site-details-dialog">
  <details class="details-reset details-overlay details-overlay-dark lh-default color-fg-default hx_rsm" open>
    <summary role="button" aria-label="Close dialog"></summary>
    <details-dialog class="Box Box--overlay d-flex flex-column anim-fade-in fast hx_rsm-dialog hx_rsm-modal">
      <button class="Box-btn-octicon m-0 btn-octicon position-absolute right-0 top-0" type="button" aria-label="Close dialog" data-close-dialog>
        <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-x">
    <path d="M3.72 3.72a.75.75 0 0 1 1.06 0L8 6.94l3.22-3.22a.749.749 0 0 1 1.275.326.749.749 0 0 1-.215.734L9.06 8l3.22 3.22a.749.749 0 0 1-.326 1.275.749.749 0 0 1-.734-.215L8 9.06l-3.22 3.22a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042L6.94 8 3.72 4.78a.75.75 0 0 1 0-1.06Z"></path>
</svg>
      </button>
      <div class="octocat-spinner tmp-my-6 js-details-dialog-spinner"></div>
    </details-dialog>
  </details>
</template>

    <div class="Popover js-hovercard-content position-absolute" style="display: none; outline: none;">
  <div class="Popover-message Popover-message--bottom-left Popover-message--large Box color-shadow-large" style="width:360px;">
  </div>
</div>

    <template id="snippet-clipboard-copy-button">
  <div class="zeroclipboard-container position-absolute right-0 top-0">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn js-clipboard-copy m-2 p-0" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon m-2 tmp-m-2">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none m-2 tmp-m-2">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>
<template id="snippet-clipboard-copy-button-unpositioned">
  <div class="zeroclipboard-container">
    <clipboard-copy aria-label="Copy code to clipboard" class="ClipboardButton btn btn-invisible js-clipboard-copy m-2 p-0 d-flex flex-justify-center flex-items-center" data-copy-feedback="Copied!" data-tooltip-direction="w">
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-copy js-clipboard-copy-icon">
    <path d="M0 6.75C0 5.784.784 5 1.75 5h1.5a.75.75 0 0 1 0 1.5h-1.5a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-1.5a.75.75 0 0 1 1.5 0v1.5A1.75 1.75 0 0 1 9.25 16h-7.5A1.75 1.75 0 0 1 0 14.25Z"></path><path d="M5 1.75C5 .784 5.784 0 6.75 0h7.5C15.216 0 16 .784 16 1.75v7.5A1.75 1.75 0 0 1 14.25 11h-7.5A1.75 1.75 0 0 1 5 9.25Zm1.75-.25a.25.25 0 0 0-.25.25v7.5c0 .138.112.25.25.25h7.5a.25.25 0 0 0 .25-.25v-7.5a.25.25 0 0 0-.25-.25Z"></path>
</svg>
      <svg aria-hidden="true" data-component="Octicon" height="16" viewBox="0 0 16 16" version="1.1" width="16" data-view-component="true" class="octicon octicon-check js-clipboard-check-icon color-fg-success d-none">
    <path d="M13.78 4.22a.75.75 0 0 1 0 1.06l-7.25 7.25a.75.75 0 0 1-1.06 0L2.22 9.28a.751.751 0 0 1 .018-1.042.751.751 0 0 1 1.042-.018L6 10.94l6.72-6.72a.75.75 0 0 1 1.06 0Z"></path>
</svg>
    </clipboard-copy>
  </div>
</template>




    </div>
    <div id="js-global-screen-reader-notice" class="sr-only mt-n1" aria-live="polite" aria-atomic="true" ></div>
    <div id="js-global-screen-reader-notice-assertive" class="sr-only mt-n1" aria-live="assertive" aria-atomic="true"></div>
  </body>
</html>

