shell自動化腳本,啟動、停止應用程式

来源:https://www.cnblogs.com/lym003/archive/2023/05/09/17384891.html
-Advertisement-
Play Games

#!/usr/bin/env bash # 常量初始化 set_runtime_vars(){ # 日期時間 Now_Date=`date +"%Y-%m-%d %H:%M:%S"` # 服務狀態 Service_Status=( "服務已開啟" "服務已停止" ) # 動作狀態 Action_St ...


#!/usr/bin/env bash

# 常量初始化
set_runtime_vars(){
    # 日期時間
    Now_Date=`date +"%Y-%m-%d %H:%M:%S"`
    
    # 服務狀態
    Service_Status=(
        "服務已開啟"
        "服務已停止"
    )
    
    # 動作狀態
    Action_Status=(
        "服務啟動成功"
        "服務停止成功"
        "服務啟動失敗"
        "服務停止失敗"
    )
    
    # 程式名稱
    App_Name=(
        "------Java-----"
        "------.Net-----"
        "------Node-----"
        "-----Python----"
        "------Web------"
        "--Java數據模擬--"
        "--.Net數據模擬--"
    )
    
    # 線程名稱
    Thread_Name=(
        "java -javaagent:/home/ymliu/Skywalking/Agent/demo_java_linux/ShinyAPM-agent/ShinyAPM-agent.jar -jar /home/ymliu/Skywalking/Agent/demo_java_linux/spring-boot-jpa-thymeleaf-curd-3.0.0.jar"  # java程式線上程中的名稱
        "dotnet demo2.dll --environment=Development"  # .net程式線上程中的名稱
        "node web.js"  # node程式線上程中的名稱
        "python manage.py runserver"  # python程式線上程中的名稱
        "dotnet demo_web.dll"  # web程式線上程中的名稱
        "DataGenerator.sh"  # Java數據模擬程式線上程中的名稱
        "python DataGenerator.py"  # .net數據模擬程式線上程中的名稱
    )
    
    # 日誌文件
    File_Name=$Script_Dir/start.log
}

# 獲取線程數量
Get_Thread_Num(){
    thread_Name=$1
    num=`ps -ef | grep "${thread_Name}" | grep -v grep | wc -l`
}

# 獲取線程ID
Get_Thread_ID(){
    thread_Name=$1
    pid=`ps -ef | grep "${thread_Name}" | grep -v grep | awk '{print $2}'`
}

# 檢查Java服務狀態
Check_Java_Status(){
    Get_Thread_Num "${Thread_Name[0]}"
    Get_Thread_ID "${Thread_Name[0]}"
    
    if [[ $num > 0 && $pid!=null ]]; then
        echo "${App_Name[0]}${Service_Status[0]}"
    else
        echo "${App_Name[0]}${Service_Status[1]}"
    fi
}

# 檢查.net服務狀態
Check_Net_Status(){
    Get_Thread_Num "${Thread_Name[1]}"
    Get_Thread_ID "${Thread_Name[1]}"
    
    if [[ $num > 0 && $pid!=null ]]; then
        echo "${App_Name[1]}${Service_Status[0]}"
    else
        echo "${App_Name[1]}${Service_Status[1]}"
    fi
}

# 檢查node服務狀態
Check_Node_Status(){
    Get_Thread_Num "${Thread_Name[2]}"
    Get_Thread_ID "${Thread_Name[2]}"
    
    if [[ $num > 0 && $pid!=null ]]; then
        echo "${App_Name[2]}${Service_Status[0]}"
    else
        echo "${App_Name[2]}${Service_Status[1]}"
    fi
}

# 檢查python服務狀態
Check_Python_Status(){
    Get_Thread_Num "${Thread_Name[3]}"
    Get_Thread_ID "${Thread_Name[3]}"
    
    if [[ $num > 0 && $pid!=null ]]; then
        echo "${App_Name[3]}${Service_Status[0]}"
    else
        echo "${App_Name[3]}${Service_Status[1]}"
    fi
}

# 檢查web服務狀態
Check_Web_Status(){
    Get_Thread_Num "${Thread_Name[4]}"
    Get_Thread_ID "${Thread_Name[4]}"
    
    if [[ $num > 0 && $pid!=null ]]; then
        echo "${App_Name[4]}${Service_Status[0]}"
    else
        echo "${App_Name[4]}${Service_Status[1]}"
    fi
}

# 檢查Java數據模擬服務狀態
Check_JavaData_Status(){
    Get_Thread_Num "${Thread_Name[5]}"
    Get_Thread_ID "${Thread_Name[5]}"
    
    if [[ $num > 0 && $pid!=null ]]; then
        echo "${App_Name[5]}${Service_Status[0]}"
    else
        echo "${App_Name[5]}${Service_Status[1]}"
    fi
}

# 檢查.net數據模擬服務狀態
Check_NetData_Status(){
    Get_Thread_Num "${Thread_Name[6]}"
    Get_Thread_ID "${Thread_Name[6]}"
    
    if [[ $num > 0 && $pid!=null ]]; then
        echo "${App_Name[6]}${Service_Status[0]}"
    else
        echo "${App_Name[6]}${Service_Status[1]}"
    fi
}

# 啟動Java程式
Start_Java_App(){
    if [[ $(Check_Java_Status) == "${App_Name[0]}${Service_Status[0]}" ]]; then
        echo "${App_Name[0]}${Service_Status[0]}"
    else
        cd $Script_Dir/demo_java_linux
        nohup ./start.sh & # 啟動程式的命令
        Get_Thread_ID "${Thread_Name[0]}"
        if [[ $(Get_Thread_ID "${Thread_Name[0]}") != null ]]; then
            echo "${App_Name[0]}${Action_Status[0]}"
            echo "${Now_Date}:${App_Name[0]}應用服務啟動成功,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[0]}${Action_Status[2]}"
            echo "${Now_Date}:${App_Name[0]}應用服務啟動失敗" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    fi
}

# 啟動net程式
Start_Net_App(){
    if [[ $(Check_Net_Status) == "${App_Name[1]}${Service_Status[0]}" ]]; then
        echo "${App_Name[1]}${Service_Status[0]}"
    else
        cd $Script_Dir/demo_net_linux
        nohup ./start.sh & # 啟動程式的命令
        if [[ $(Get_Thread_ID "${Thread_Name[1]}") != null ]]; then
            echo "${App_Name[1]}${Action_Status[0]}"
            echo "${Now_Date}:${App_Name[1]}應用服務啟動成功,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[1]}${Action_Status[2]}"
            echo "${Now_Date}:${App_Name[1]}應用服務啟動失敗" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    fi
}

# 啟動node程式
Start_Node_App(){
    if [[ $(Check_Node_Status) == "${App_Name[2]}${Service_Status[0]}" ]]; then
        echo "${App_Name[2]}${Service_Status[0]}"
    else
        cd $Script_Dir/demo_node_linux
        nohup ./start.sh & # 啟動程式的命令
        if [[ $(Get_Thread_ID "${Thread_Name[2]}") != null ]]; then
            echo "${App_Name[2]}${Action_Status[0]}"
            echo "${Now_Date}:${App_Name[2]}應用服務啟動成功,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[2]}${Action_Status[2]}"
            echo "${Now_Date}:${App_Name[2]}應用服務啟動失敗" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    fi
}

# 啟動python程式
Start_Python_App(){
    if [[ $(Check_Python_Status) == "${App_Name[3]}${Service_Status[0]}" ]]; then
        echo "${App_Name[3]}${Service_Status[0]}"
    else
        cd $Script_Dir/demo_python/mysite
        source venv/bin/activate # 啟動python虛擬環境
        nohup ./feizhuru_start.sh & # 啟動程式的命令
        if [[ $(Get_Thread_ID "${Thread_Name[3]}") != null ]]; then
            echo "${App_Name[3]}${Action_Status[0]}"
            echo "${Now_Date}:${App_Name[3]}應用服務啟動成功,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[3]}${Action_Status[2]}"
            echo "${Now_Date}:${App_Name[3]}應用服務啟動失敗" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    fi
}

# 啟動web程式
Start_Demo_Web(){
    if [[ $(Check_Web_Status) == "${App_Name[4]}${Service_Status[0]}" ]]; then
        echo "${App_Name[4]}${Service_Status[0]}"
    else
        cd $Script_Dir/demo_web
        nohup ./start.sh & #啟動程式的命令
        if [[ $(Get_Thread_ID "${Thread_Name[4]}") != null ]]; then
            echo "${App_Name[4]}${Action_Status[0]}"
            echo "${Now_Date}:${App_Name[4]}應用服務啟動成功,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[4]}${Action_Status[2]}"
            echo "${Now_Date}:${App_Name[4]}應用服務啟動失敗" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    fi
}

# 啟動Java模擬數據程式
Start_Datagenerator_Bash_App(){
    if [[ $(Check_JavaData_Status) == "${App_Name[5]}${Service_Status[0]}" ]]; then
        echo "${App_Name[5]}${Service_Status[0]}"
    else
        cd $Script_Dir/ScriptFile/bash
        nohup ./DataGenerator.sh & # 啟動程式的命令
        if [[ $(Get_Thread_ID "${Thread_Name[5]}") != null ]]; then
            echo "${App_Name[5]}${Action_Status[0]}"
            echo "${Now_Date}:${App_Name[5]}應用服務啟動成功,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[5]}${Action_Status[2]}"
            echo "${Now_Date}:${App_Name[5]}應用服務啟動失敗" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    fi
}

# 啟動net模擬數據程式
Start_Datagenerator_Python_App(){
    if [[ $(Check_NetData_Status) == "${App_Name[6]}${Service_Status[0]}" ]]; then
        echo "${App_Name[6]}${Service_Status[0]}"
    else
        cd $Script_Dir/ScriptFile/python
        source venv/bin/activate
        nohup python DataGenerator.py & # 啟動程式的命令
        if [[ $(Get_Thread_ID "${Thread_Name[6]}") != null ]]; then
            echo "${App_Name[6]}${Action_Status[0]}"
            echo "${Now_Date}:${App_Name[6]}應用服務啟動成功,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[6]}${Action_Status[2]}"
            echo "${Now_Date}:${App_Name[6]}應用服務啟動失敗" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    fi
}

# 停止Java程式
Stop_Java_App(){
    if [[ $(Check_Java_Status) == "${App_Name[0]}${Service_Status[0]}" ]]; then
        Get_Thread_ID "${Thread_Name[0]}"
        kill -9 $pid
        if [[ $(Get_Thread_Num "${Thread_Name[0]}") > 0 && $(Get_Thread_ID "${Thread_Name[0]}") != null ]]; then
            echo "${App_Name[0]}${Action_Status[3]}"
            echo "${Now_Date}:${App_Name[0]}應用服務停止失敗,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[0]}${Action_Status[1]}"
            echo "${Now_Date}:${App_Name[0]}應用服務停止成功" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    else
        echo "${App_Name[0]}${Service_Status[1]}"
    fi
}

# 停止Net程式
Stop_Net_App(){
    if [[ $(Check_Net_Status) == "${App_Name[1]}${Service_Status[0]}" ]]; then
        Get_Thread_ID "${Thread_Name[1]}"
        kill -9 $pid
        if [[ $(Get_Thread_Num "${Thread_Name[1]}") > 0 && $(Get_Thread_ID "${Thread_Name[1]}") != null ]]; then
            echo "${App_Name[1]}${Action_Status[3]}"
            echo "${Now_Date}:${App_Name[1]}應用服務停止失敗,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[1]}${Action_Status[1]}"
            echo "${Now_Date}:${App_Name[1]}應用服務停止成功" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    else
        echo "${App_Name[1]}${Service_Status[1]}"
    fi
}

# 停止node程式
Stop_Node_App(){
    if [[ $(Check_Node_Status) == "${App_Name[2]}${Service_Status[0]}" ]]; then
        Get_Thread_ID "${Thread_Name[2]}"
        kill -9 $pid
        if [[ $(Get_Thread_Num "${Thread_Name[2]}") > 0 && $(Get_Thread_ID "${Thread_Name[2]}") != null ]]; then
            echo "${App_Name[2]}${Action_Status[3]}"
            echo "${Now_Date}:${App_Name[2]}應用服務停止失敗,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[1]}${Action_Status[1]}"
            echo "${Now_Date}:${App_Name[2]}應用服務停止成功" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    else
        echo "${App_Name[2]}${Service_Status[1]}"
    fi
}

# 停止python程式
Stop_Python_App(){
    if [[ $(Check_Python_Status) == "${App_Name[3]}${Service_Status[0]}" ]]; then
        Get_Thread_ID "${Thread_Name[3]}"
        kill -9 $pid
        if [[ $(Get_Thread_Num "${Thread_Name[3]}") > 0 && $(Get_Thread_ID "${Thread_Name[3]}") != null ]]; then
            echo "${App_Name[3]}${Action_Status[3]}"
            echo "${Now_Date}:${App_Name[3]}應用服務停止失敗,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[3]}${Action_Status[1]}"
            echo "${Now_Date}:${App_Name[3]}應用服務停止成功" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    else
        echo "${App_Name[3]}${Service_Status[1]}"
    fi
}

# 停止web程式
Stop_Demo_Web(){
    if [[ $(Check_Web_Status) == "${App_Name[4]}${Service_Status[0]}" ]]; then
        Get_Thread_ID "${Thread_Name[4]}"
        kill -9 $pid
        if [[ $(Get_Thread_Num "${Thread_Name[4]}") > 0 && $(Get_Thread_ID "${Thread_Name[4]}") != null ]]; then
            echo "${App_Name[4]}${Action_Status[3]}"
            echo "${Now_Date}:${App_Name[4]}應用服務停止失敗,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[4]}${Action_Status[1]}"
            echo "${Now_Date}:${App_Name[4]}應用服務停止成功" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    else
        echo "${App_Name[4]}${Service_Status[1]}"
    fi
}

# 停止Java模擬數據程式
Stop_Datagenerator_Bash_App(){
    if [[ $(Check_JavaData_Status) == "${App_Name[5]}${Service_Status[0]}" ]]; then
        Get_Thread_ID "${Thread_Name[5]}"
        kill -9 $pid
        if [[ $(Get_Thread_Num "${Thread_Name[5]}") > 0 && $(Get_Thread_ID "${Thread_Name[5]}") != null ]]; then
            echo "${App_Name[5]}${Action_Status[3]}"
            echo "${Now_Date}:${App_Name[5]}應用服務停止失敗,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[5]}${Action_Status[1]}"
            echo "${Now_Date}:${App_Name[5]}應用服務停止成功" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    else
        echo "${App_Name[5]}${Service_Status[1]}"
    fi
}

# 停止net模擬數據程式
Stop_Datagenerator_Python_App(){
    if [[ $(Check_NetData_Status) == "${App_Name[6]}${Service_Status[0]}" ]]; then
        Get_Thread_ID "${Thread_Name[6]}"
        kill -9 $pid
        if [[ $(Get_Thread_Num "${Thread_Name[6]}") > 0 && $(Get_Thread_ID "${Thread_Name[6]}") != null ]]; then
            echo "${App_Name[6]}${Action_Status[3]}"
            echo "${Now_Date}:${App_Name[6]}應用服務停止失敗,線程ID=${pid}" >> $File_Name # 把時間、應用名稱寫入日誌
        else
            echo "${App_Name[6]}${Action_Status[1]}"
            echo "${Now_Date}:${App_Name[6]}應用服務停止成功" >> $File_Name # 把時間、應用名稱寫入日誌
        fi
    else
        echo "${App_Name[6]}${Service_Status[1]}"
    fi
}

# 開啟程式
Start_All(){
    Start_Java_App
    Start_Net_App
    Start_Node_App
    Start_Python_App
    Start_Demo_Web
    Start_Datagenerator_Bash_App
    Start_Datagenerator_Python_App
}

# 結束程式
Stop_All(){
    Stop_Java_App
    Stop_Net_App
    Stop_Node_App
    Stop_Python_App
    Stop_Demo_Web
    Stop_Datagenerator_Bash_App
    Stop_Datagenerator_Python_App
}

# 狀態查詢
Status_All(){
    Check_Java_Status
    Check_Net_Status
    Check_Node_Status
    Check_Python_Status
    Check_Web_Status
    Check_JavaData_Status
    Check_NetData_Status
}

# 主函數
main(){
    # 程式初始化
    Script_Dir=$(
        cd $(dirname "$0") || exit
        pwd
    )
    
    set_runtime_vars
    
    Script_Param=$1
    case ${Script_Param} in
        "start")
            Start_All
        ;;
        "stop")
            Stop_All
        ;;
        "status")
            Status_All
        ;;
        *)
            echo "用法:startup.sh [選項]"
            echo "選項:[status: 狀態查詢] [start: 開啟服務] [stop: 停止服務]"
        ;;
    esac
}

main "$@"

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Scala學習總結 一、Scala簡介 Scala特點: Scala 是一門多範式 (multi-paradigm) 的編程語言 ,設計初衷是要集成面向對象編程和函數式編程的各種 特性。 Scala 是一門以 java 虛擬機 (JVM) 為運行環境的編程語言 ,Scala 源代碼(.scala)會 ...
  • 基於java的小區物業管理系統實現,智慧社區管理,住宅小區的日常管理,物業管理平臺,智慧小區管理平臺實現,科技園物業管理。業主管理平臺,小區業主信息,物業信息化管理平臺。 ...
  • 在學習jvm的時候許多人處於迷茫的狀態,對一些基礎的知識反而聽過就忘了,這篇筆記是我在學習jvm的時候隨手記的一些,適合已經學過或者瞭解過的小伙伴複習回顧一下,當然知識的覆蓋是沒有的,主要記錄了我覺得容易忘記或者記錯的知識點,這些有很多是基石知識,希望大家不要忘記,大家看到就當正好複習一下,對大家的 ...
  • 教程簡介 Tcl 是“工具控制語言(Tool Command Language)”的縮寫,其面向對象為otcl語言。Tk 是 Tcl“圖形工具箱”的擴展,它提供各種標準的 GUI 介面項,以利於迅速進行高級應用程式開發。 Tcl(最早稱為“工具命令語言”"Tool Command Language" ...
  • 基於java的旅游信息系統,景點信息管理,旅游路線管理,訂單信息管理,新聞信息管理,地方美食等。springboot的旅游管理系統,旅游系統. ...
  • 本文屬於OData系列文章 Intro 前面寫了很多有關OData使用的文章,很多讀者會有疑問,直接將實體對象暴露給最終用戶會不會有風險?$expand在預設配置的情況下,數據會不會有泄露風險? 答案是肯定的,由於OData的特性,提供給我們便捷同時也會帶來一些風險。很多地方推薦使用DTO模式來隔離 ...
  • 一:背景 1. 講故事 這個案例有點特殊,以前dump分析都是和軟體工程師打交道,這次和非業內人士交流,隔行如隔山,從指導dump怎麼抓到問題解決,需要一個強大的耐心。 前幾天有位朋友在微信上找到我,說他們公司採購的MES系統登錄的時候出現了異常,讓我幫忙看一下,我在想解鈴還須系鈴人,怎麼的也不應該 ...
  • 本文屬於OData系列 Intro 對外提供WEBAPI時,如果遇上了版本升級,那麼控制WEBAPI的版本也是非常必要的。OData官方提供了版本控制以及管理的解決方案,我個人是實踐體會是不好用,好在社區提供了對應的nuget包,與.NET主版本同步更新。 介紹 ASP.NET API Versio ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...