﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-paulwong-随笔分类-RESTFUL-API</title><link>http://blogjava.net/paulwong/category/54497.html</link><description /><language>zh-cn</language><lastBuildDate>Tue, 26 Jan 2021 17:18:24 GMT</lastBuildDate><pubDate>Tue, 26 Jan 2021 17:18:24 GMT</pubDate><ttl>60</ttl><item><title>「测试」 - 接口测试 &amp; mock工具Moco</title><link>http://www.blogjava.net/paulwong/archive/2021/01/21/435777.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Thu, 21 Jan 2021 06:09:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2021/01/21/435777.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/435777.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2021/01/21/435777.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/435777.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/435777.html</trackback:ping><description><![CDATA[<a target="null"></a>当需要调用第三方HTTP接口时，别人的接口还没完成，可先根据接口定义文档，返回适当的数据，以便开发。<br />
<br />
在LINUX上的部署结构为：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->&#9500;&#9472;&#9472;&nbsp;boot<br />
&#9474;&nbsp;&nbsp;&nbsp;&#9500;&#9472;&#9472;&nbsp;moco-runner-1.1.0-standalone.jar<br />
&#9474;&nbsp;&nbsp;&nbsp;&#9492;&#9472;&#9472;&nbsp;.version<br />
&#9500;&#9472;&#9472;&nbsp;foo.json<br />
&#9500;&#9472;&#9472;&nbsp;logs<br />
&#9474;&nbsp;&nbsp;&nbsp;&#9500;&#9472;&#9472;&nbsp;back<br />
&#9474;&nbsp;&nbsp;&nbsp;&#9492;&#9472;&#9472;&nbsp;moco.log<br />
&#9500;&#9472;&#9472;&nbsp;moco.sh<br />
&#9492;&#9472;&#9472;&nbsp;startup-moco.sh</div>
<br />
.version文件：<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
-->/path/to/boot/moco-runner-1.1.0-standalone.jar&nbsp;1.1.0</div>
<br />
moco.sh<br />
<div style="background-color: #eeeeee; font-size: 13px; border: 1px solid #cccccc; padding: 4px 5px 4px 4px; width: 98%; word-break: break-all;"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #800000; ">#!/usr/bin/env&nbsp;bash<br />
<br />
#&nbsp;Ensure&nbsp;this&nbsp;file&nbsp;is&nbsp;executable&nbsp;via&nbsp;`chmod&nbsp;a+x&nbsp;moco`,&nbsp;then&nbsp;place&nbsp;it<br />
#&nbsp;somewhere&nbsp;on&nbsp;your&nbsp;$PATH,&nbsp;like&nbsp;~/bin.&nbsp;The&nbsp;rest&nbsp;of&nbsp;moco&nbsp;will&nbsp;be<br />
#&nbsp;installed&nbsp;upon&nbsp;first&nbsp;run&nbsp;into&nbsp;the&nbsp;~/.moco&nbsp;directory.<br />
<br />
if&nbsp;[&nbsp;`id&nbsp;-u`&nbsp;-eq&nbsp;0&nbsp;]&nbsp;&amp;&amp;&nbsp;[&nbsp;"$MOCO_ROOT"&nbsp;=&nbsp;""&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"WARNING:&nbsp;You're&nbsp;currently&nbsp;running&nbsp;as&nbsp;root;&nbsp;probably&nbsp;by&nbsp;accident."<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Press&nbsp;control-C&nbsp;to&nbsp;abort&nbsp;or&nbsp;Enter&nbsp;to&nbsp;continue&nbsp;as&nbsp;root."<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Set&nbsp;MOCO_ROOT&nbsp;to&nbsp;disable&nbsp;this&nbsp;warning."<br />
&nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;_<br />
fi<br />
<br />
echo&nbsp;$*<br />
<br />
#export&nbsp;MOCO_HOME="$</span>{<span style="color: #FF0000; ">MOCO_HOME</span>:<span style="color: #0000FF; ">-"$HOME/.moco"</span>}<span style="color: #800000; ">"<br />
export&nbsp;MOCO_HOME=$(cd&nbsp;`dirname&nbsp;$0`;&nbsp;cd&nbsp;boot;&nbsp;pwd)<br />
VERSION_LOG_FILE="$MOCO_HOME/.version"<br />
<br />
#&nbsp;Determine&nbsp;the&nbsp;Java&nbsp;command&nbsp;to&nbsp;use&nbsp;to&nbsp;start&nbsp;the&nbsp;JVM.<br />
if&nbsp;[&nbsp;-n&nbsp;"$JAVA_HOME"&nbsp;]&nbsp;;&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;-x&nbsp;"$JAVA_HOME/jre/sh/java"&nbsp;]&nbsp;;&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;IBM's&nbsp;JDK&nbsp;on&nbsp;AIX&nbsp;uses&nbsp;strange&nbsp;locations&nbsp;for&nbsp;the&nbsp;executables<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JAVACMD="$JAVA_HOME/jre/sh/java"<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;JAVACMD="$JAVA_HOME/bin/java"<br />
&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;!&nbsp;-x&nbsp;"$JAVACMD"&nbsp;]&nbsp;;&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;die&nbsp;"ERROR:&nbsp;JAVA_HOME&nbsp;is&nbsp;set&nbsp;to&nbsp;an&nbsp;invalid&nbsp;directory:&nbsp;$JAVA_HOME<br />
<br />
Please&nbsp;set&nbsp;the&nbsp;JAVA_HOME&nbsp;variable&nbsp;in&nbsp;your&nbsp;environment&nbsp;to&nbsp;match&nbsp;the<br />
location&nbsp;of&nbsp;your&nbsp;Java&nbsp;installation."<br />
&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
else<br />
&nbsp;&nbsp;&nbsp;&nbsp;JAVACMD="java"<br />
&nbsp;&nbsp;&nbsp;&nbsp;which&nbsp;java&nbsp;&gt;/dev/null&nbsp;2&gt;&amp;1&nbsp;||&nbsp;die&nbsp;"ERROR:&nbsp;JAVA_HOME&nbsp;is&nbsp;not&nbsp;set&nbsp;and&nbsp;no&nbsp;'java'&nbsp;command&nbsp;could&nbsp;be&nbsp;found&nbsp;in&nbsp;your&nbsp;PATH.<br />
<br />
Please&nbsp;set&nbsp;the&nbsp;JAVA_HOME&nbsp;variable&nbsp;in&nbsp;your&nbsp;environment&nbsp;to&nbsp;match&nbsp;the<br />
location&nbsp;of&nbsp;your&nbsp;Java&nbsp;installation."<br />
fi<br />
<br />
if&nbsp;[&nbsp;"$HTTP_CLIENT"&nbsp;=&nbsp;""&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;type&nbsp;-p&nbsp;curl&nbsp;&gt;/dev/null&nbsp;2&gt;&amp;1;&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;"$https_proxy"&nbsp;!=&nbsp;""&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;CURL_PROXY="-x&nbsp;$https_proxy"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP_CLIENT="curl&nbsp;$CURL_PROXY&nbsp;-f&nbsp;-L&nbsp;-o"<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;HTTP_CLIENT="wget&nbsp;-O"<br />
&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
fi<br />
<br />
function&nbsp;download_failed_message&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Failed&nbsp;to&nbsp;download&nbsp;$1"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"It's&nbsp;possible&nbsp;your&nbsp;HTTP&nbsp;client's&nbsp;certificate&nbsp;store&nbsp;does&nbsp;not&nbsp;have&nbsp;the"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"correct&nbsp;certificate&nbsp;authority&nbsp;needed.&nbsp;This&nbsp;is&nbsp;often&nbsp;caused&nbsp;by&nbsp;an"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"out-of-date&nbsp;version&nbsp;of&nbsp;libssl.&nbsp;Either&nbsp;upgrade&nbsp;it&nbsp;or&nbsp;set&nbsp;HTTP_CLIENT"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"to&nbsp;turn&nbsp;off&nbsp;certificate&nbsp;checks</span>:<span style="color: #0000FF; ">"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;&nbsp;export&nbsp;HTTP_CLIENT=\"wget&nbsp;--no-check-certificate&nbsp;-O\"&nbsp;#&nbsp;or"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"&nbsp;&nbsp;export&nbsp;HTTP_CLIENT=\"curl&nbsp;--insecure&nbsp;-f&nbsp;-L&nbsp;-o\""<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"It's&nbsp;also&nbsp;possible&nbsp;that&nbsp;you're&nbsp;behind&nbsp;a&nbsp;firewall&nbsp;haven't&nbsp;yet"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"set&nbsp;HTTP_PROXY&nbsp;and&nbsp;HTTPS_PROXY."<br />
</span>}<span style="color: #800000; "><br />
<br />
function&nbsp;download&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;$HTTP_CLIENT&nbsp;"$2.pending"&nbsp;"$1"<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;$?&nbsp;==&nbsp;0&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;#&nbsp;TODO</span>:<span style="color: #0000FF; ">&nbsp;checksum<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;mv&nbsp;-f&nbsp;"$2.pending"&nbsp;"$2"<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;"$2.pending"&nbsp;2&gt;&nbsp;/dev/null<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;download_failed_message&nbsp;"$1"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;exit&nbsp;1<br />
&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
</span>}<span style="color: #800000; "><br />
<br />
function&nbsp;parse_tag&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;tag_value=`grep&nbsp;"&lt;$2&gt;.*&lt;.$2&gt;"&nbsp;$1&nbsp;|&nbsp;sed&nbsp;-e&nbsp;"s/^.*&lt;$2/&lt;$2/"&nbsp;|&nbsp;cut&nbsp;-f2&nbsp;-d"&gt;"|&nbsp;cut&nbsp;-f1&nbsp;-d"&lt;"`<br />
</span>}<span style="color: #800000; "><br />
<br />
function&nbsp;parse_maven_metadata&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;MOCO_METADATA_URL="http</span>:<span style="color: #0000FF; ">//repo1.maven.org/maven2/com/github/dreamhead/moco-runner/maven-metadata.xml"<br />
&nbsp;&nbsp;&nbsp;&nbsp;MOCO_METADATA="/tmp/maven-metadata.xml"<br />
&nbsp;&nbsp;&nbsp;&nbsp;download&nbsp;$MOCO_METADATA_URL&nbsp;$MOCO_METADATA<br />
&nbsp;&nbsp;&nbsp;&nbsp;parse_tag&nbsp;$MOCO_METADATA&nbsp;latest<br />
&nbsp;&nbsp;&nbsp;&nbsp;LATEST_VERSION=$tag_value<br />
</span>}<span style="color: #800000; "><br />
<br />
function&nbsp;parse_standalone_latest_url&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;parse_maven_metadata<br />
&nbsp;&nbsp;&nbsp;&nbsp;VERSION=${LATEST_VERSION%</span>}<span style="color: #800000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;LATEST_MOCO_STANDALONE_JAR="moco-runner-$VERSION-standalone.jar"<br />
&nbsp;&nbsp;&nbsp;&nbsp;MOCO_STANDLONE_URL="http://repo1.maven.org/maven2/com/github/dreamhead/moco-runner/$LATEST_VERSION/$LATEST_MOCO_STANDALONE_JAR"<br />
}<br />
<br />
function&nbsp;install&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Install&nbsp;moco"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Parse&nbsp;the&nbsp;latest&nbsp;version&nbsp;of&nbsp;moco"<br />
&nbsp;&nbsp;&nbsp;&nbsp;parse_standalone_latest_url<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Download&nbsp;the&nbsp;latest&nbsp;moco</span>:<span style="color: #0000FF; ">&nbsp;$LATEST_VERSION"<br />
&nbsp;&nbsp;&nbsp;&nbsp;MOCO_STANDALONE="$MOCO_HOME/$LATEST_MOCO_STANDALONE_JAR"<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"$MOCO_STANDALONE&nbsp;$LATEST_VERSION"&nbsp;&gt;&gt;&nbsp;$VERSION_LOG_FILE<br />
&nbsp;&nbsp;&nbsp;&nbsp;download&nbsp;$MOCO_STANDLONE_URL&nbsp;$MOCO_STANDALONE<br />
</span>}<span style="color: #800000; "><br />
<br />
function&nbsp;load_current_version&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;read&nbsp;MOCO_STANDALONE&nbsp;CURRENT_VERSION&nbsp;&lt;&nbsp;$VERSION_LOG_FILE<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[[&nbsp;"$(uname)"&nbsp;-ne&nbsp;"Darwin"&nbsp;&amp;&amp;&nbsp;"$(expr&nbsp;substr&nbsp;$(uname&nbsp;-s)&nbsp;2&nbsp;6)"&nbsp;==&nbsp;"CYGWIN"&nbsp;&nbsp;&nbsp;]];then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;MOCO_STANDALONE=`cygpath&nbsp;-m&nbsp;"$MOCO_STANDALONE"`<br />
&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
</span>}<span style="color: #800000; "><br />
<br />
function&nbsp;usage&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;printf&nbsp;"<br />
options</span>:<span style="color: #0000FF; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;help&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;show&nbsp;help<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;start&nbsp;server,&nbsp;e.g.&nbsp;moco&nbsp;start&nbsp;-p&nbsp;12306&nbsp;-c&nbsp;configfile.json<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;shutdown&nbsp;&nbsp;shutdown&nbsp;moco&nbsp;server&nbsp;<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;upgrade&nbsp;&nbsp;&nbsp;upgrade&nbsp;moco<br />
"<br />
</span>}<span style="color: #800000; "><br />
<br />
if&nbsp;[&nbsp;!&nbsp;-e&nbsp;"$MOCO_HOME"&nbsp;]<br />
then<br />
&nbsp;&nbsp;&nbsp;&nbsp;mkdir&nbsp;"$MOCO_HOME"<br />
&nbsp;&nbsp;&nbsp;&nbsp;install<br />
fi<br />
<br />
if&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"start"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Starting<img src="http://www.blogjava.net/Images/dot.gif" alt="" />"<br />
&nbsp;&nbsp;&nbsp;&nbsp;load_current_version<br />
&nbsp;&nbsp;&nbsp;&nbsp;exec&nbsp;"$JAVACMD"&nbsp;-jar&nbsp;"$MOCO_STANDALONE"&nbsp;$*<br />
elif&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"http"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Starting&nbsp;HTTP&nbsp;server<img src="http://www.blogjava.net/Images/dot.gif" alt="" />"<br />
&nbsp;&nbsp;&nbsp;&nbsp;load_current_version<br />
&nbsp;&nbsp;&nbsp;&nbsp;exec&nbsp;"$JAVACMD"&nbsp;-jar&nbsp;"$MOCO_STANDALONE"&nbsp;$*<br />
elif&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"https"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Starting&nbsp;HTTPS&nbsp;server<img src="http://www.blogjava.net/Images/dot.gif" alt="" />"<br />
&nbsp;&nbsp;&nbsp;&nbsp;load_current_version<br />
&nbsp;&nbsp;&nbsp;&nbsp;exec&nbsp;"$JAVACMD"&nbsp;-jar&nbsp;"$MOCO_STANDALONE"&nbsp;$*<br />
elif&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"socket"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Starting&nbsp;Socket&nbsp;server<img src="http://www.blogjava.net/Images/dot.gif" alt="" />"<br />
&nbsp;&nbsp;&nbsp;&nbsp;load_current_version<br />
&nbsp;&nbsp;&nbsp;&nbsp;exec&nbsp;"$JAVACMD"&nbsp;-jar&nbsp;"$MOCO_STANDALONE"&nbsp;$*<br />
elif&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"shutdown"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Shutting&nbsp;down&nbsp;server<img src="http://www.blogjava.net/Images/dot.gif" alt="" />"<br />
&nbsp;&nbsp;&nbsp;&nbsp;load_current_version<br />
&nbsp;&nbsp;&nbsp;&nbsp;exec&nbsp;"$JAVACMD"&nbsp;-jar&nbsp;"$MOCO_STANDALONE"&nbsp;$*<br />
elif&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"upgrade"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Check&nbsp;the&nbsp;new&nbsp;version"<br />
&nbsp;&nbsp;&nbsp;&nbsp;parse_maven_metadata<br />
&nbsp;&nbsp;&nbsp;&nbsp;load_current_version<br />
<br />
&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;[&nbsp;"$LATEST_VERSION"&nbsp;=&nbsp;"$CURRENT_VERSION"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"The&nbsp;current&nbsp;version&nbsp;of&nbsp;moco&nbsp;is&nbsp;the&nbsp;latest"<br />
&nbsp;&nbsp;&nbsp;&nbsp;else<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Upgrading<img src="http://www.blogjava.net/Images/dot.gif" alt="" />"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;rm&nbsp;$VERSION_LOG_FILE<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;install<br />
&nbsp;&nbsp;&nbsp;&nbsp;fi<br />
elif&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"version"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;load_current_version<br />
&nbsp;&nbsp;&nbsp;&nbsp;echo&nbsp;"Moco&nbsp;version:&nbsp;$CURRENT_VERSION"<br />
elif&nbsp;[&nbsp;"$1"&nbsp;=&nbsp;"help"&nbsp;];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;usage<br />
else<br />
&nbsp;&nbsp;&nbsp;&nbsp;usage<br />
fi<br />
</span></div>
<br />
这是根据GIT上的原始文件作的修改。<br />
<div><br />
startup-moco.sh</div>
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #800000; ">CMD_PATH=$(cd&nbsp;`dirname&nbsp;$0`;&nbsp;pwd)<br />
<br />
#&nbsp;项目日志输出绝对路径<br />
LOG_DIR=$</span>{<span style="color: #FF0000; ">CMD_PATH</span>}<span style="color: #800000; ">"/logs"<br />
LOG_FILE="moco.log"<br />
LOG_PATH="$</span>{<span style="color: #FF0000; ">LOG_DIR</span>}<span style="color: #800000; ">/$</span>{<span style="color: #FF0000; ">LOG_FILE</span>}<span style="color: #800000; ">"<br />
<br />
#&nbsp;当前时间<br />
NOW=`date&nbsp;+'%Y-%m-%m-%H-%M-%S'`<br />
NOW_PRETTY=`date&nbsp;+'%Y-%m-%m&nbsp;%H:%M:%S'`<br />
<br />
#&nbsp;启动日志<br />
STARTUP_LOG="================================================&nbsp;$</span>{<span style="color: #FF0000; ">NOW_PRETTY</span>}<span style="color: #800000; ">&nbsp;================================================\n"<br />
<br />
#&nbsp;日志备份目录<br />
LOG_BACK_DIR="$</span>{<span style="color: #FF0000; ">LOG_DIR</span>}<span style="color: #800000; ">/back/"<br />
<br />
#&nbsp;如果logs文件夹不存在,则创建文件夹<br />
if&nbsp;[[&nbsp;!&nbsp;-d&nbsp;"$</span>{<span style="color: #FF0000; ">LOG_DIR</span>}<span style="color: #800000; ">"&nbsp;]];&nbsp;then<br />
&nbsp;&nbsp;mkdir&nbsp;"$</span>{<span style="color: #FF0000; ">LOG_DIR</span>}<span style="color: #800000; ">"<br />
fi<br />
<br />
#&nbsp;如果logs/back文件夹不存在,则创建文件夹<br />
if&nbsp;[[&nbsp;!&nbsp;-d&nbsp;"$</span>{<span style="color: #FF0000; ">LOG_BACK_DIR</span>}<span style="color: #800000; ">"&nbsp;]];&nbsp;then<br />
&nbsp;&nbsp;mkdir&nbsp;"$</span>{<span style="color: #FF0000; ">LOG_BACK_DIR</span>}<span style="color: #800000; ">"<br />
fi<br />
<br />
#&nbsp;如果项目运行日志存在,则重命名备份<br />
if&nbsp;[[&nbsp;-f&nbsp;"$</span>{<span style="color: #FF0000; ">LOG_PATH</span>}<span style="color: #800000; ">"&nbsp;]];&nbsp;then<br />
&nbsp;&nbsp;&nbsp;&nbsp;mv&nbsp;$</span>{<span style="color: #FF0000; ">LOG_PATH</span>}<span style="color: #800000; ">&nbsp;"$</span>{<span style="color: #FF0000; ">LOG_BACK_DIR</span>}<span style="color: #800000; ">/$</span>{<span style="color: #FF0000; ">APPLICATION</span>}<span style="color: #800000; ">_back_$</span>{<span style="color: #FF0000; ">NOW</span>}<span style="color: #800000; ">.log"<br />
fi<br />
<br />
#&nbsp;创建新的项目运行日志<br />
echo&nbsp;""&nbsp;&gt;&nbsp;$</span>{<span style="color: #FF0000; ">LOG_PATH</span>}<span style="color: #800000; "><br />
<br />
</span><span style="color: #800000;">#&nbsp;可支持多个json配置文件</span><br />
<span style="color: #800000; ">$CMD_PATH/moco.sh&nbsp;http&nbsp;-p&nbsp;8088&nbsp;-g "</span><span style="color: #800000;">$</span>{<span style="color: #ff0000;">CMD_PATH</span>}/<span style="color: #800000; ">root.json" &gt;&nbsp;$</span>{<span style="color: #FF0000; ">LOG_PATH</span>}<span style="color: #800000; ">&nbsp;2&gt;&amp;1&nbsp;&amp;<br />
<br />
#&nbsp;打印启动日志<br />
echo&nbsp;-e&nbsp;$</span>{<span style="color: #FF0000; ">STARTUP_LOG</span>}</div>
<br />root.json<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #800000; ">[<br />&nbsp;&nbsp;&nbsp;&nbsp;</span>{<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"context"</span>:<span style="color: #0000FF; ">&nbsp;"/service-a",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"include":&nbsp;"foo.json"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span>}<span style="color: #800000; ">,<br />&nbsp;&nbsp;&nbsp;&nbsp;</span>{<span style="color: #FF0000; "><br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"context"</span>:<span style="color: #0000FF; ">&nbsp;"/service-b",<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"include":&nbsp;"bar.json"<br />&nbsp;&nbsp;&nbsp;&nbsp;</span>}<span style="color: #800000; "><br />]</span></div><br />
foo.json<br />
<div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br />
<br />
Code highlighting produced by Actipro CodeHighlighter (freeware)<br />
http://www.CodeHighlighter.com/<br />
<br />
--><span style="color: #800000; ">[<br />
&nbsp;&nbsp;&nbsp;&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"request"</span>:<span style="color: #0000FF; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"method":&nbsp;"post",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"forms":&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"method":&nbsp;"uploadKycInfo"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}<span style="color: #800000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"response":&nbsp;</span>{<span style="color: #FF0000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"json"</span>:<span style="color: #0000FF; ">&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"response":&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"subcode":&nbsp;"10000",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"submsg":&nbsp;"Success",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"sndDt":&nbsp;"20210121101800",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"remark":&nbsp;"上传验证基本信息",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"msgBody":&nbsp;{<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"merOrdrNo":&nbsp;"A00120210121654321",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"retCode":&nbsp;"00000",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"retMsg":&nbsp;"成功/处理完成",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"remark":&nbsp;"上传详情或上传信息的简要描述"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span>}<span style="color: #800000; "><br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;},<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"code":&nbsp;"0000",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"msg":&nbsp;"处理完成",<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;"sign":&nbsp;"DF2659FE3EB8184561135D9F55F5EF5"<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}<br />
&nbsp;&nbsp;&nbsp;&nbsp;}<br />
]</span></div>
<br />访问路径：<br /><div style="background-color:#eeeeee;font-size:13px;border:1px solid #CCCCCC;padding-right: 5px;padding-bottom: 4px;padding-left: 4px;padding-top: 4px;width: 98%;word-break:break-all"><!--<br /><br />Code highlighting produced by Actipro CodeHighlighter (freeware)<br />http://www.CodeHighlighter.com/<br /><br />--><span style="color: #800000; ">http://ip:port/service-a/</span></div><br />
<a href="https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md" target="_blank">https://github.com/dreamhead/moco/blob/master/moco-doc/apis.md</a><br />
<a href="https://zhuanlan.zhihu.com/p/60076337" target="_blank">https://zhuanlan.zhihu.com/p/60076337</a>&nbsp;<br /><a href="https://www.programmersought.com/article/68272293688/">https://www.programmersought.com/article/68272293688/</a><br /><img src ="http://www.blogjava.net/paulwong/aggbug/435777.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2021-01-21 14:09 <a href="http://www.blogjava.net/paulwong/archive/2021/01/21/435777.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>RESTful 最佳实践</title><link>http://www.blogjava.net/paulwong/archive/2014/08/18/417052.html</link><dc:creator>paulwong</dc:creator><author>paulwong</author><pubDate>Mon, 18 Aug 2014 00:47:00 GMT</pubDate><guid>http://www.blogjava.net/paulwong/archive/2014/08/18/417052.html</guid><wfw:comment>http://www.blogjava.net/paulwong/comments/417052.html</wfw:comment><comments>http://www.blogjava.net/paulwong/archive/2014/08/18/417052.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/paulwong/comments/commentRss/417052.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/paulwong/services/trackbacks/417052.html</trackback:ping><description><![CDATA[&nbsp;&nbsp;&nbsp;&nbsp; 摘要: 除了传统对于远程调用的需求，近来移动开发对于api的规范化需要，restful作为一个流行的接口调用方式，值得深入了解。声明&nbsp;本文属于转载：原文此文为实践总结，是自己在实践过程中积累的经验和"哲学"。部分内容参考相关资料，参考内容请看尾页。建议对RESTful有一定了解者阅读!"哲学"不要为了RESTful而RESTful在能表达清楚的情况下，简单就是美接口路径设计接口设计原则URI指向...&nbsp;&nbsp;<a href='http://www.blogjava.net/paulwong/archive/2014/08/18/417052.html'>阅读全文</a><img src ="http://www.blogjava.net/paulwong/aggbug/417052.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/paulwong/" target="_blank">paulwong</a> 2014-08-18 08:47 <a href="http://www.blogjava.net/paulwong/archive/2014/08/18/417052.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>