<commit_before>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 数据结构大作业 Yrarbil API
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Version 0.1.0.0-base
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%确定该文档
\def\apidPart{}
%%%%%%
%% 版本
%%%%%%
\def\apiver{0.1.0.0-base}

%%%%%%
% flag 设置
%%%%%%
\makeatletter
\def\@NoStyleChapter{} % 设置不适用章节格式
\def\@apiPart{} % 设置当前为 api 部分
\def\@APIVersionFlag{}
\def\@RequestArgColor{\relax}
\def\@UsingAppendix{}
\def\@FootnoteWithPage{}
\def\@lst@json@define{} %json
\makeatother

%使用 XeLaTeX 和 XeCJK 套装 编译
\documentclass[UTF8]{article}
\usepackage{xeCJK}


\include{Author}
\include{Preamble}

\title{Yrarbil's API Document \thanks{version : \apiver}}

%%%%
%% API 常用
%%%%
\def\safe{/[\textit{safe}]}
\def\GET{\colorbox[rgb]{0.77,0.53,0.97}{\textbf{GET}}}
\def\POST{\colorbox[rgb]{0.77,0.53,0.97}{\textbf{POST}}}
\def \itemPOST{\item[访问方式] \POST}
\def \itemGET{\item[访问方式] \GET}
\def\bfJSON{\textbf{JSON}}
\def\viaurl{\item[{\colorbox[rgb]{0.47,0.88,0.89}{访问URL}}]}
\def\viareq#1{\item[{\colorbox[rgb]{0.57,0.88,0.99}{访问方式}}] #1}
\def\rtdata{\item[{\colorbox[rgb]{0.70,0.9,0.59}{返回数据}}]}





\begin{document}
    \maketitle
    \newpage
    \include{PrjIntr}
    \pdfbookmark[1]{目录}{anchor}
    \tableofcontents
    \newpage


    \section{API 改动说明}

    \subsection{API 0.0.0.0-dbtag}
    该 API 标志的，首先，意味着这个数据库可查询其中支持的各个 API 版本。其次，意味着这是一个标准
      \footnote{按照这个API 文档构件的后端。并且从理论上，非配套的前后端也可以交互。}
    后端。最后，一般前端是无法直接访问数据库的，然而后端是要访问数据库的。

    \subsection{API 0.0.0.0-betag}
    该 API 标志着可以通过特定方式查询后端与数据库支持的 API 的版本。这也是一个标准后端的应有的。

    \subsection{DEL 0.0.0.0-tag,0.0.0.0-B,0.0.1.0-base}
    重新 整理API。

    \section{API说明}
    本 API 文档是约束前后端的行为的文档。规定了前后端之间的行为规范。但值得注意的是，前后端不一定是满足这个文档的。当前的 API 版本是 \apiver 。
    \subsection{那些部分会遵循api}
    原则上来说，整个项目均会按照此 api 文档构建。但主要的是在数据库，后端，与前端部分支持。













    \section{数据库API}
    \apiversion{0.0.0.0-dstag}{版本检查}
    可查询表 versions 来确定 所需要的 api 对应的版本号是否支持。
    \begin{lstlisting}[language=SQL]
SELECT * FROM versions WHERE NOT vereq(ver,yourver);
    \end{lstlisting}
    其中 yourver 是指定的版本标号。




















    \section{后端API}
    后端 API 主要以 HTTP 请求为主。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    \subsection{未分类API}

    \apiversion{0.1.0.0-base}{访问“主页”}
    访问主页
    \footnote{ http://hostname:port/ hostname 是指 当前后端运行的主机的ip，或者其他URL 等可以访问的域名，ip等有效内容，port是端口，默认是3000}
    可以获取一些信息。
    \begin{description}
        \viaurl http://hostname:port/
        \viareq{\GET}
        \rtdata 标准 HTML 代码。
    \end{description}

    \apiversion{0.0.1.0-base}{获得 api 版本}
    获得当前 api 版本支持。
    \begin{description}
		\viaurl http://hostname:port/version
		\viareq{\GET}
		\reqargclr{NoJSON 选项}
		$$nojson=[true|false]$$
		如果是 $true$ 那么则不返回 JSON 数据，默认是 $false$。
        \rtdata 返回数据时 \bfJSON 数据，其中 将会返回数据库与后端的版本。
	\end{description}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


    \subsection{用户认证API}%   Authentication 



    \apiversion{0.1.0.0-base}{管理员登陆}
    \begin{description}

        \viaurl http://hostname:port/1daa62b
        \footnote{
            英文单词 \textbf{authentication} 的
            MD5 值是
            $1daa54e7c5a9caaa0c5043eadea9d824$,
            SHA256 值是
            $557212052a5022b1055b5c259eadd48a13c79a360215300c5753d17870d4a62b$。
        }
        \safe/b8ab91a6
        \footnote{
            英文单词\textbf{login}  MD5 值是$b8abe8f5a587a4c69685b17a954f8a3f$，
            SHA256值是
            $6c1420b8f3be7a61357ecc82a1c391dffe438930c103466b1660625e42ac91a6$。
        }
        \safe
        \footnote{\textit{\textbf{safe}} 是指安全添加的内容，例如可以是主机ip的sha256值。一个URL中的“safe”不一定相同。后同}/fc8252b7
        \footnote{
            英文单词的\textbf{admin} 
            MD5值是 $456b7016a916a4b178dd72b947c152b7 $,
            SHA256 值是
            $fc8252c8dc55839967c58b9ad755a59b61b67c13227ddae4bd3f78a38bf394f7$。
        }
        \safe

        \viareq \POST

        \reqargclr{用户ID}\label{par:id}
        \footnote{这个颜色的背景，表示HTTP请求参数，后同。}
        $$uid=[id]$$
        其中id为用户登录的id，不强制为数字。

        \reqargclr{密码}\label{par:key}
         $$key=[md5\, of\, password][safe]$$
         其中第一部分是密码的md5值。

        \rtdata 请求返回的数据是 \bfJSON 数据。具体返回内容有：
        特定的临时ID密钥，用于简化之后操作的认证；
        时限，长度为小时，限定使用实现\footnote{可选，可无}。
         \\ 可能的返回数据：
        \begin{lstlisting}[language=JavaScript]
{
   "tidk":"************************",
   "time":24
}
        \end{lstlisting}


    \end{description}








    \apiversion{0.1.0.0-base}{管理员退出}
    \begin{description}
        \viaurl http://hostname:port/1daa62b\safe/a050ba73
        \footnote{
            英文单词 \textbf{logout} 的
            MD5值是$a05080965b04f4d190bb94b552bea56c $,
            SHA256 值是
            $60b2a0ba73317dce9502417ce5bdb75d0a16067848647b9a5f5f4e040397b20f$。
        }
        \safe/fc8252b7\safe

        \viareq \POST

        \reqargclr{用户ID}\label{par:logout:id}
        \footnote{这个请求与临时ID密钥为二选一。}
        $$uid=[id]$$
        其中id为用户登陆时的id，不强制为数字。

        \reqargclr{临时ID密钥}\label{par:logout:tidk}
        \footnote{用户ID，可使该用户对应的所有临时ID密钥下线。}
        $$tidk=[key]$$
        其中key是临时ID密钥。

        \rtdata 返回数据将是 \bfJSON 数据。其中会包含成功与否的信息。
        \\可能返回的信息：
        \begin{lstlisting}[language=JavaScript]
{
    "status":"success",
    "logoutcount":2
}
        \end{lstlisting}\label{par:logout:example}
        其中 \textbf{logoutcount} 是退出用户数量。
    \end{description}






    \apiversion{0.1.0.0-base}{读者登录}
		用于读者的登录。
		\begin{description}

		\viaurl http://hostname:port/1daa62b\safe /b8ab91a6\safe/5ece85ba
        \footnote{
            英文单词 \textbf{reader} 的
            MD5 值是
            $5ece7ae3f6950b744840b1d4c42e3a8e$，
            SHA256 值是
            $cd546fe85ba55d958a7fd1b2733f6f8f1ba5e4e099ddf0aad80b6d770b2eed9e$。
            }
        \safe

        \viareq \POST

        \reqargclr{用户ID} 参见 \ref{par:id}。
        \reqargclr{密码} 参见 \ref{par:key}。
        \rtdata 返回的数据将是 \bfJSON 数据。返回的内容中包括临时ID密钥，与有效时间，以分钟计。
        \\可能返回的数据：
        \begin{lstlisting}[language=JavaScript]
{
    "tidk":"****************",
    "time":120
}
        \end{lstlisting}
		\end{description}





        \apiversion{0.1.0.0-base}{读者退出}
        \begin{description}
            \viaurl http://hostname:port/1daa62b\safe/5ece85ba\safe/fc8252b7
            \viareq \POST

            \reqargclr{用户ID}
            参见 \ref{par:logout:id}。

            \reqargclr{临时ID密钥}
            参见 \ref{par:logout:tidk}。


            \rtdata 返回数据将是 \bfJSON 数据。其中会包含成功与否的信息。
            \\可能返回的信息：
            \begin{lstlisting}[language=JavaScript]
{
    "status":"failure"
}
            \end{lstlisting}
            另外一个例子请参见 \ref{par:logout:example}。
        \end{description}


        \subsection{图书借阅API}
        \footnote{借阅，归还，续借}
        \subsubsection*{注意}
        这一部分需要管理员的临时ID 密钥，其给定的参数是
        $$tid=[temp id key]$$。
        其中 temp id key 是临时秘钥，其中要求该部分中的每个 POST GET 访问 提供。
        \apiversion{0.1.0.0-base}{图书借阅}
        \begin{description}
            \viaurl http://hostname:port/a3cab3a
                \footnote{
                    英文单词 \textbf{management} 的
                    MD5值是$759d05d9478213e50a48a3ca7545fdcd$,
                    SHA256 值是
                    $9b47b1d1f65f93872d2b1cc222ab3a5b842c9213c0601b6fab6bf0b274b6c823$。
                }
                \safe/5527da67
                \footnote{
                    英文单词 \textbf{lending} 的
                    MD5 值是
                    $07c52effd9cc6b16d231c7da672826a4$，
                    SHA256 值是
                    $e0bdc575f0fa8f791e99d552763f6a57353b940be7375a2bdba2e034387daa4e$。
                }
                \safe
                
                \viareq{\POST}
                
                \reqargclr{读者条码}
                $$rid=[reader's id]$$
                给定读者的条码。
                \reqargclr{图书条码}
                $$bid=[book‘s id]$$
                给定图书的条码。
                \rtdata 
                返回的数据是 \bfJSON 数据。会显示借阅成功与否\footnote{如果失败，将会传入失败的原因。超期可能使得图书无法借阅。}，何时到期。
                \\  可能返回的数据
                \begin{lstlisting}[language=JavaScript]
{
	"status":"success",
	"date":"2010-2-29"
}
                \end{lstlisting}
        \end{description}
        \apiversion{0.1.0.0-base}{图书归还}
        \begin{description}
	        \viaurl  http://hostname:port/a3cab3a\safe/3689884
	        \footnote{
	        	英文单词 \textbf{return}的
	        	MD5 值是 $64672a10de469fbe6988486f9582d37c$,
	        	SHA256值是$9e34e5324d74f5d7636894144e2b8804df7ae09ca2268fc207a328e4811b8200$。
	        }\safe
	        \viareq{\POST}
	        \reqargclr{图书条码}
	        $$bid=[book's id]$$
	        给定要归还的图书的目录。
	        \rtdata 返回数据为\bfJSON 。或者还书成功，或者返回失败的信息及原因。如果图书超期，则需要先处理超期
	        \footnote{即缴纳罚款，以“购买”借阅时长，使得可以还款，此处需要先除法超期处理，然后再缴纳罚款，最后还书。}。
	        \\ 可能返回的数据
	        \begin{lstlisting}[language=JavaScript]
{
	"status":"failed",
	"reason":"overdue"
}
	        \end{lstlisting}
	        \end{description}
        \apiversion{0.1.0.0-base}{图书续借}
        \begin{description}
	        \viaurl http://hostname:port/a3cab3a\safe/4a2a356d
		     \footnote{
		     	英文单词 \textbf{renew} 的
		     	MD5 值是$faa1a11b00a356df6bf38236a8bf8437$,
		     	SHA256 值是 $4a2ae1cd00fe13c16af14299ef08f8aedd0722832723a1e1f683eb1308950b0d$。
		     }\safe
		     \viareq{\POST}
		     \reqargclr{图书条码}
		     $$bid=[book's id]$$
		     给定要归还的图书的条码。
		     \rtdata 返回的数据为 \bfJSON 。或者成功，并返回借阅期限。或者返回的是原因，如果为超期，则先需要处理超期问题。
		     \\ 可能返回的数据：
		     \begin{lstlisting}[]
		     \end{lstlisting}
		      \end{description}
        \apiversion{0.1.0.0-base}{超期处理}
        超期处理部分暂时先不处理。
        \apiversion{0.1.0.0-base}{处罚处理}%缴纳罚款
        \begin{description}
	        \viaurl http://hostname:port/a3cab3a\safe/c91ed8fd
	        \footnote{英文单词 \textbf{pay} 的
	        	MD5 值是 $c91e7f018a4ea68d6864a7d21f663c9a$，
	        	SHA256 值是 $4f675fed8fd4763a87b0981acb0cf446b1a438233aef624f563844b97d5c7bf5$。
	        	}
	        \safe
	        \viareq{\POST}
	        \reqargclr{读者条码}
	        $$rid=[reader's id]$$
	        传入的是读者条码。
	        \reqargclr{金额}
	        $$cash=[reader's cash]$$
	        传入的是读者的缴纳的罚款的金额。
	        \reqargclr{事由}
	        $$resaon=[text]$$
	        传入的是为什么缴纳罚款。
	        \rtdata 返回值是 \bfJSON 数据，其中包含是否成功，如果不成功会给出理由，反之则会给出处理的大流水号。
	        \\ 可呢的例子：
	        \begin{lstlisting}[language=JavaScript]
{
	"status":"success",
	"bigSerialNumber":"4654231@PAY@2015-10-24"
}
	        \end{lstlisting}
	    \end{description}
        \subsection{图书预约API}
        这一部分需要给定读者的临时 ID 秘钥，格式是
        $$tide=[the temp id of reader]$$
        其中读者秘钥 需要提供给 所有 POST GET 方法。
        \apiversion{0.1.0.0-base}{图书预约}
        \begin{description}
	         \viaurl http://hostname:port/1d224726
	         \footnote{
	         	英文单词 \textbf{appointment} 的
	         	MD5 值是 $1d226c3a8e1e3eb2cdf2d4fba102f020$，
	         	SHA256值是 $4b247264036a8c154cd24bd40987cae6bdf7d3d9793b2d81dbe39571cc64a10a$。
	         }\safe/on
		     \viareq{\POST}
		     \reqargclr{图书条码}
		     \rtdata 返回的数据是 \bfJSON ，将返回是否预约成功，以及如果预约不成功将返回预约失败的原因。
		     \\ 肯能返回的内容：
			 \begin{lstlisting}[language=JavaScript]
{
	"status":"failed",
	"reason":"Is not in library"
}
			 \end{lstlisting}
	       \end{description}
        \apiversion{0.1.0.0-base}{图书预约取消}
        \begin{description}
	        \viaurl http://hostname:port/1d224726\safe/off
	        \viareq{\POST}
	        \reqargclr{图书条码}
	        \rtdata 返回的数据是 \bfJSON ，其中包括 是否成功，以及不成功的原因。
	         \end{description}
        \subsection{常量查询}
        \apiversion{0.1.0.0-base}{公开常量查询}
        \begin{description}
	        \viaurl http://hostname:port/varcat
	        \viareq{|POST}
	        \reqargclr{查询的变量名}
	        $$varname=[text]$$
	        \rtdata 返回的数据是 \bfJSON ,内容包括所查询的内容与结果。
	        \\ 可能的返回:
			\begin{lstlisting}[language=JavaScript]
{
	"requested":"undefined",
	"retrun":"It just undefined :)"
}
			\end{lstlisting}
			 \end{description}
        \subsection{图书信息查询}
        \apiversion{0.1.0.0-base}{图书状态查询}
        \begin{description}<commit_msg>fix a error<commit_after>%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 数据结构大作业 Yrarbil API
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% Version 0.1.0.0-base
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%



%确定该文档
\def\apidPart{}
%%%%%%
%% 版本
%%%%%%
\def\apiver{0.1.0.0-base}

%%%%%%
% flag 设置
%%%%%%
\makeatletter
\def\@NoStyleChapter{} % 设置不适用章节格式
\def\@apiPart{} % 设置当前为 api 部分
\def\@APIVersionFlag{}
\def\@RequestArgColor{\relax}
\def\@UsingAppendix{}
\def\@FootnoteWithPage{}
\def\@lst@json@define{} %json
\makeatother

%使用 XeLaTeX 和 XeCJK 套装 编译
\documentclass[UTF8]{article}
\usepackage{xeCJK}


\include{Author}
\include{Preamble}

\title{Yrarbil's API Document \thanks{version : \apiver}}

%%%%
%% API 常用
%%%%
\def\safe{/[\textit{safe}]}
\def\GET{\colorbox[rgb]{0.77,0.53,0.97}{\textbf{GET}}}
\def\POST{\colorbox[rgb]{0.77,0.53,0.97}{\textbf{POST}}}
\def \itemPOST{\item[访问方式] \POST}
\def \itemGET{\item[访问方式] \GET}
\def\bfJSON{\textbf{JSON}}
\def\viaurl{\item[{\colorbox[rgb]{0.47,0.88,0.89}{访问URL}}]}
\def\viareq#1{\item[{\colorbox[rgb]{0.57,0.88,0.99}{访问方式}}] #1}
\def\rtdata{\item[{\colorbox[rgb]{0.70,0.9,0.59}{返回数据}}]}





\begin{document}
    \maketitle
    \newpage
    \include{PrjIntr}
    \pdfbookmark[1]{目录}{anchor}
    \tableofcontents
    \newpage


    \section{API 改动说明}

    \subsection{API 0.0.0.0-dbtag}
    该 API 标志的，首先，意味着这个数据库可查询其中支持的各个 API 版本。其次，意味着这是一个标准
      \footnote{按照这个API 文档构件的后端。并且从理论上，非配套的前后端也可以交互。}
    后端。最后，一般前端是无法直接访问数据库的，然而后端是要访问数据库的。

    \subsection{API 0.0.0.0-betag}
    该 API 标志着可以通过特定方式查询后端与数据库支持的 API 的版本。这也是一个标准后端的应有的。

    \subsection{DEL 0.0.0.0-tag,0.0.0.0-B,0.0.1.0-base}
    重新 整理API。

    \section{API说明}
    本 API 文档是约束前后端的行为的文档。规定了前后端之间的行为规范。但值得注意的是，前后端不一定是满足这个文档的。当前的 API 版本是 \apiver 。
    \subsection{那些部分会遵循api}
    原则上来说，整个项目均会按照此 api 文档构建。但主要的是在数据库，后端，与前端部分支持。













    \section{数据库API}
    \apiversion{0.0.0.0-dstag}{版本检查}
    可查询表 versions 来确定 所需要的 api 对应的版本号是否支持。
    \begin{lstlisting}[language=SQL]
SELECT * FROM versions WHERE NOT vereq(ver,yourver);
    \end{lstlisting}
    其中 yourver 是指定的版本标号。




















    \section{后端API}
    后端 API 主要以 HTTP 请求为主。

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

    \subsection{未分类API}

    \apiversion{0.1.0.0-base}{访问“主页”}
    访问主页
    \footnote{ http://hostname:port/ hostname 是指 当前后端运行的主机的ip，或者其他URL 等可以访问的域名，ip等有效内容，port是端口，默认是3000}
    可以获取一些信息。
    \begin{description}
        \viaurl http://hostname:port/
        \viareq{\GET}
        \rtdata 标准 HTML 代码。
    \end{description}

    \apiversion{0.0.1.0-base}{获得 api 版本}
    获得当前 api 版本支持。
    \begin{description}
		\viaurl http://hostname:port/version
		\viareq{\GET}
		\reqargclr{NoJSON 选项}
		$$nojson=[true|false]$$
		如果是 $true$ 那么则不返回 JSON 数据，默认是 $false$。
        \rtdata 返回数据时 \bfJSON 数据，其中 将会返回数据库与后端的版本。
	\end{description}

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%


    \subsection{用户认证API}%   Authentication 



    \apiversion{0.1.0.0-base}{管理员登陆}
    \begin{description}

        \viaurl http://hostname:port/1daa62b
        \footnote{
            英文单词 \textbf{authentication} 的
            MD5 值是
            $1daa54e7c5a9caaa0c5043eadea9d824$,
            SHA256 值是
            $557212052a5022b1055b5c259eadd48a13c79a360215300c5753d17870d4a62b$。
        }
        \safe/b8ab91a6
        \footnote{
            英文单词\textbf{login}  MD5 值是$b8abe8f5a587a4c69685b17a954f8a3f$，
            SHA256值是
            $6c1420b8f3be7a61357ecc82a1c391dffe438930c103466b1660625e42ac91a6$。
        }
        \safe
        \footnote{\textit{\textbf{safe}} 是指安全添加的内容，例如可以是主机ip的sha256值。一个URL中的“safe”不一定相同。后同}/fc8252b7
        \footnote{
            英文单词的\textbf{admin} 
            MD5值是 $456b7016a916a4b178dd72b947c152b7 $,
            SHA256 值是
            $fc8252c8dc55839967c58b9ad755a59b61b67c13227ddae4bd3f78a38bf394f7$。
        }
        \safe

        \viareq \POST

        \reqargclr{用户ID}\label{par:id}
        \footnote{这个颜色的背景，表示HTTP请求参数，后同。}
        $$uid=[id]$$
        其中id为用户登录的id，不强制为数字。

        \reqargclr{密码}\label{par:key}
         $$key=[md5\, of\, password][safe]$$
         其中第一部分是密码的md5值。

        \rtdata 请求返回的数据是 \bfJSON 数据。具体返回内容有：
        特定的临时ID密钥，用于简化之后操作的认证；
        时限，长度为小时，限定使用实现\footnote{可选，可无}。
         \\ 可能的返回数据：
        \begin{lstlisting}[language=JavaScript]
{
   "tidk":"************************",
   "time":24
}
        \end{lstlisting}


    \end{description}








    \apiversion{0.1.0.0-base}{管理员退出}
    \begin{description}
        \viaurl http://hostname:port/1daa62b\safe/a050ba73
        \footnote{
            英文单词 \textbf{logout} 的
            MD5值是$a05080965b04f4d190bb94b552bea56c $,
            SHA256 值是
            $60b2a0ba73317dce9502417ce5bdb75d0a16067848647b9a5f5f4e040397b20f$。
        }
        \safe/fc8252b7\safe

        \viareq \POST

        \reqargclr{用户ID}\label{par:logout:id}
        \footnote{这个请求与临时ID密钥为二选一。}
        $$uid=[id]$$
        其中id为用户登陆时的id，不强制为数字。

        \reqargclr{临时ID密钥}\label{par:logout:tidk}
        \footnote{用户ID，可使该用户对应的所有临时ID密钥下线。}
        $$tidk=[key]$$
        其中key是临时ID密钥。

        \rtdata 返回数据将是 \bfJSON 数据。其中会包含成功与否的信息。
        \\可能返回的信息：
        \begin{lstlisting}[language=JavaScript]
{
    "status":"success",
    "logoutcount":2
}
        \end{lstlisting}\label{par:logout:example}
        其中 \textbf{logoutcount} 是退出用户数量。
    \end{description}






    \apiversion{0.1.0.0-base}{读者登录}
		用于读者的登录。
		\begin{description}

		\viaurl http://hostname:port/1daa62b\safe /b8ab91a6\safe/5ece85ba
        \footnote{
            英文单词 \textbf{reader} 的
            MD5 值是
            $5ece7ae3f6950b744840b1d4c42e3a8e$，
            SHA256 值是
            $cd546fe85ba55d958a7fd1b2733f6f8f1ba5e4e099ddf0aad80b6d770b2eed9e$。
            }
        \safe

        \viareq \POST

        \reqargclr{用户ID} 参见 \ref{par:id}。
        \reqargclr{密码} 参见 \ref{par:key}。
        \rtdata 返回的数据将是 \bfJSON 数据。返回的内容中包括临时ID密钥，与有效时间，以分钟计。
        \\可能返回的数据：
        \begin{lstlisting}[language=JavaScript]
{
    "tidk":"****************",
    "time":120
}
        \end{lstlisting}
		\end{description}





        \apiversion{0.1.0.0-base}{读者退出}
        \begin{description}
            \viaurl http://hostname:port/1daa62b\safe/5ece85ba\safe/fc8252b7
            \viareq \POST

            \reqargclr{用户ID}
            参见 \ref{par:logout:id}。

            \reqargclr{临时ID密钥}
            参见 \ref{par:logout:tidk}。


            \rtdata 返回数据将是 \bfJSON 数据。其中会包含成功与否的信息。
            \\可能返回的信息：
            \begin{lstlisting}[language=JavaScript]
{
    "status":"failure"
}
            \end{lstlisting}
            另外一个例子请参见 \ref{par:logout:example}。
        \end{description}


        \subsection{图书借阅API}
        \footnote{借阅，归还，续借}
        \subsubsection*{注意}
        这一部分需要管理员的临时ID 密钥，其给定的参数是
        $$tid=[temp id key]$$。
        其中 temp id key 是临时秘钥，其中要求该部分中的每个 POST GET 访问 提供。
        \apiversion{0.1.0.0-base}{图书借阅}
        \begin{description}
            \viaurl http://hostname:port/a3cab3a
                \footnote{
                    英文单词 \textbf{management} 的
                    MD5值是$759d05d9478213e50a48a3ca7545fdcd$,
                    SHA256 值是
                    $9b47b1d1f65f93872d2b1cc222ab3a5b842c9213c0601b6fab6bf0b274b6c823$。
                }
                \safe/5527da67
                \footnote{
                    英文单词 \textbf{lending} 的
                    MD5 值是
                    $07c52effd9cc6b16d231c7da672826a4$，
                    SHA256 值是
                    $e0bdc575f0fa8f791e99d552763f6a57353b940be7375a2bdba2e034387daa4e$。
                }
                \safe
                
                \viareq{\POST}
                
                \reqargclr{读者条码}
                $$rid=[reader's id]$$
                给定读者的条码。
                \reqargclr{图书条码}
                $$bid=[book‘s id]$$
                给定图书的条码。
                \rtdata 
                返回的数据是 \bfJSON 数据。会显示借阅成功与否\footnote{如果失败，将会传入失败的原因。超期可能使得图书无法借阅。}，何时到期。
                \\  可能返回的数据
                \begin{lstlisting}[language=JavaScript]
{
	"status":"success",
	"date":"2010-2-29"
}
                \end{lstlisting}
        \end{description}
        \apiversion{0.1.0.0-base}{图书归还}
        \begin{description}
	        \viaurl  http://hostname:port/a3cab3a\safe/3689884
	        \footnote{
	        	英文单词 \textbf{return}的
	        	MD5 值是 $64672a10de469fbe6988486f9582d37c$,
	        	SHA256值是$9e34e5324d74f5d7636894144e2b8804df7ae09ca2268fc207a328e4811b8200$。
	        }\safe
	        \viareq{\POST}
	        \reqargclr{图书条码}
	        $$bid=[book's id]$$
	        给定要归还的图书的目录。
	        \rtdata 返回数据为\bfJSON 。或者还书成功，或者返回失败的信息及原因。如果图书超期，则需要先处理超期
	        \footnote{即缴纳罚款，以“购买”借阅时长，使得可以还款，此处需要先除法超期处理，然后再缴纳罚款，最后还书。}。
	        \\ 可能返回的数据
	        \begin{lstlisting}[language=JavaScript]
{
	"status":"failed",
	"reason":"overdue"
}
	        \end{lstlisting}
	        \end{description}
        \apiversion{0.1.0.0-base}{图书续借}
        \begin{description}
	        \viaurl http://hostname:port/a3cab3a\safe/4a2a356d
		     \footnote{
		     	英文单词 \textbf{renew} 的
		     	MD5 值是$faa1a11b00a356df6bf38236a8bf8437$,
		     	SHA256 值是 $4a2ae1cd00fe13c16af14299ef08f8aedd0722832723a1e1f683eb1308950b0d$。
		     }\safe
		     \viareq{\POST}
		     \reqargclr{图书条码}
		     $$bid=[book's id]$$
		     给定要归还的图书的条码。
		     \rtdata 返回的数据为 \bfJSON 。或者成功，并返回借阅期限。或者返回的是原因，如果为超期，则先需要处理超期问题。
		     \\ 可能返回的数据：
		     \begin{lstlisting}[]
		     \end{lstlisting}
		      \end{description}
        \apiversion{0.1.0.0-base}{超期处理}
        超期处理部分暂时先不处理。
        \apiversion{0.1.0.0-base}{处罚处理}%缴纳罚款
        \begin{description}
	        \viaurl http://hostname:port/a3cab3a\safe/c91ed8fd
	        \footnote{英文单词 \textbf{pay} 的
	        	MD5 值是 $c91e7f018a4ea68d6864a7d21f663c9a$，
	        	SHA256 值是 $4f675fed8fd4763a87b0981acb0cf446b1a438233aef624f563844b97d5c7bf5$。
	        	}
	        \safe
	        \viareq{\POST}
	        \reqargclr{读者条码}
	        $$rid=[reader's id]$$
	        传入的是读者条码。
	        \reqargclr{金额}
	        $$cash=[reader's cash]$$
	        传入的是读者的缴纳的罚款的金额。
	        \reqargclr{事由}
	        $$resaon=[text]$$
	        传入的是为什么缴纳罚款。
	        \rtdata 返回值是 \bfJSON 数据，其中包含是否成功，如果不成功会给出理由，反之则会给出处理的大流水号。
	        \\ 可呢的例子：
	        \begin{lstlisting}[language=JavaScript]
{
	"status":"success",
	"bigSerialNumber":"4654231@PAY@2015-10-24"
}
	        \end{lstlisting}
	    \end{description}
        \subsection{图书预约API}
        这一部分需要给定读者的临时 ID 秘钥，格式是
        $$tide=[the temp id of reader]$$
        其中读者秘钥 需要提供给 所有 POST GET 方法。
        \apiversion{0.1.0.0-base}{图书预约}
        \begin{description}
	         \viaurl http://hostname:port/1d224726
	         \footnote{
	         	英文单词 \textbf{appointment} 的
	         	MD5 值是 $1d226c3a8e1e3eb2cdf2d4fba102f020$，
	         	SHA256值是 $4b247264036a8c154cd24bd40987cae6bdf7d3d9793b2d81dbe39571cc64a10a$。
	         }\safe/on
		     \viareq{\POST}
		     \reqargclr{图书条码}
		     \rtdata 返回的数据是 \bfJSON ，将返回是否预约成功，以及如果预约不成功将返回预约失败的原因。
		     \\ 肯能返回的内容：
			 \begin{lstlisting}[language=JavaScript]
{
	"status":"failed",
	"reason":"Is not in library"
}
			 \end{lstlisting}
	       \end{description}
        \apiversion{0.1.0.0-base}{图书预约取消}
        \begin{description}
	        \viaurl http://hostname:port/1d224726\safe/off
	        \viareq{\POST}
	        \reqargclr{图书条码}
	        \rtdata 返回的数据是 \bfJSON ，其中包括 是否成功，以及不成功的原因。
	         \end{description}
        \subsection{常量查询}
        \apiversion{0.1.0.0-base}{公开常量查询}
        \begin{description}
	        \viaurl http://hostname:port/varcat
	        \viareq{\POST}
	        \reqargclr{查询的变量名}
	        $$varname=[text]$$
	        \rtdata 返回的数据是 \bfJSON ,内容包括所查询的内容与结果。
	        \\ 可能的返回:
			\begin{lstlisting}[language=JavaScript]
{
	"requested":"undefined",
	"retrun":"It just undefined :)"
}
			\end{lstlisting}
			 \end{description}
        \subsection{图书信息查询}
        \apiversion{0.1.0.0-base}{图书状态查询}
        \begin{description}
{'fraction_non_alphanumeric': 0.1579034941763727, 'fraction_numerical': 0.08136439267886855, 'mean_word_length': 2.2148970312917893, 'pattern_counts': {'":': 34, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 46, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '6302351', 'n_tokens_mistral': 12328, 'n_tokens_neox': 11723, 'n_words': 1101}