Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

执行对象注册

执行对象注册是在注册时便给定一个实例化的对象,以后每一个请求都交给该对象(同一对象)处理,该对象常驻内存不释放。服务端进程在启动时便需要初始化这些执行对象,并且这些对象需要自行负责对自身数据的并发安全维护(往往对象的成员变量应当是并发安全的,每个请求执行完毕后该对象不会销毁,其成员变量也不会释放)。

执行对象注册

我们可以通过BindObject方法完成执行对象的注册。

...

随后可以通过 http://127.0.0.1:8199/object/show 查看效果。

默认路由方法

控制器中的Index方法是一个特殊的方法,例如,当注册的路由规则为/user时,HTTP请求到/user时,将会自动映射到控制器的Index方法。也就是说,访问地址/user/user/index将会达到相同的执行效果。

路由内置变量

当使用BindObject方法进行执行对象注册时,在路由规则中可以使用两个内置的变量:{.struct}{.method},前者表示当前对象名称,后者表示当前注册的方法名

...

我们尝试着访问 http://127.0.0.1:8199/order-list ,可以看到页面输出list。如果路由规则中不使用内置变量,那么默认的情况下,方法将会被追加到指定的路由规则末尾。

命名风格规则

通过对象进行路由注册时,可以根据对象及方法名称自动生成路由规则,默认的路由规则为:当方法名称带有多个单词(按照字符大写区分单词)时,路由控制器默认会自动使用英文连接符号-进行拼接,因此访问的时候方法名称需要带-号。

...

http://127.0.0.1:8100/user/show-list
http://127.0.0.1:8200/User/ShowList
http://127.0.0.1:8300/user/showlist
http://127.0.0.1:8400/user/showList

对象方法注册

假如控制器中有若干公开方法,但是我只想注册其中几个,其余的方法我不想对外公开,怎么办?

...

  SERVER  | DOMAIN  | ADDRESS | METHOD |    ROUTE     |         HANDLER         | MIDDLEWARE
|---------|---------|---------|--------|--------------|-------------------------|------------|
  default | default | :8199   | ALL    | /object/show | main.(*Controller).Show |
|---------|---------|---------|--------|--------------|-------------------------|------------|

绑定路由方法

我们可以通过BindObjectMethod方法绑定指定的路由到指定的方法执行(方法名称参数区分大小写)。

...

  SERVER  | DOMAIN  | ADDRESS | METHOD | ROUTE |         HANDLER         | MIDDLEWARE
|---------|---------|---------|--------|-------|-------------------------|------------|
  default | default | :8199   | ALL    | /show | main.(*Controller).Show |
|---------|---------|---------|--------|-------|-------------------------|------------|

RESTful对象注册

RESTful设计方式的控制器,通常用于API服务。在这种模式下,HTTP的Method将会映射到控制器对应的方法名称,例如:POST方式将会映射到控制器的Post方法中(公开方法,首字母大写),DELETE方式将会映射到控制器的Delete方法中,以此类推。其他非HTTP Method命名的方法,即使是定义的包公开方法,将不会自动注册,对于应用端不可见。当然,如果控制器并未定义对应HTTP Method的方法,该Method请求下将会返回 HTTP Status 404

...

  SERVER  | DOMAIN  | ADDRESS | METHOD |  ROUTE  |          HANDLER          | MIDDLEWARE
|---------|---------|---------|--------|---------|---------------------------|------------|
  default | default | :8199   | DELETE | /object | main.(*Controller).Delete |
|---------|---------|---------|--------|---------|---------------------------|------------|
  default | default | :8199   | GET    | /object | main.(*Controller).Get    |
|---------|---------|---------|--------|---------|---------------------------|------------|
  default | default | :8199   | POST   | /object | main.(*Controller).Post   |
|---------|---------|---------|--------|---------|---------------------------|------------|

构造方法Init与析构方法Shut

执行对象中的InitShut是两个在HTTP请求流程中被Server自动调用的特殊方法(类似构造函数析构函数的作用)。

...