程序员开年第一唠:rest 开发步骤
 作者:不在线第一只蜗牛
- 2024-01-08  福建
- 本文字数:2641 字 - 阅读完需:约 9 分钟 
rest 开发步骤
1)代码工厂自动生成 REST CRUD 代码。
 
 自动生成的代码:
unit rest.tunit;//代码由代码工厂自动生成//2023-01-28 13:20:07{$I def.inc}interface
uses  {$IFDEF firedac}  db.firedac, db.firedacPool, {$ENDIF}  {$IFDEF unidac}db.unidac, db.unidacpool,  {$ENDIF}  classes, db, System.NetEncoding, serialize, rtti.execfunc,  system.JSON.Serializers, yn.log, SysUtils;
type  Ttunit = record    [Serialize(1)] unitid: string;    [Serialize(2)] unitname: string;  end;
  TtunitArray = record    [Serialize(1)] status: integer;    [Serialize(2)] exception: string;    [Serialize(3)] message: string;    [Serialize(4)] tunits: TArray<Ttunit>;  end;
  TRes = record    [Serialize(1)] status: integer;    [Serialize(2)] exception: string;    [Serialize(3)] message: string;  end;
type  TFunc2872 = class(TFunc)    function select(url: string; body: rawbytestring): string;    function insert(url: string; body: rawbytestring): string;    function update(url: string; body: rawbytestring): string;    function delete(url: string; body: rawbytestring): string;  end;
implementation
function TFunc2872.select(url: string; body: rawbytestring): string;var  db: tdb;  pool: tdbpool;  rows: TtunitArray;  i: integer;  res: TRes;begin  try    try      pool := GetDBPool('1');      db := pool.Lock;      db.qry.Close;      db.qry.SQL.Clear;      db.qry.SQL.Text := 'select * from tunit';      db.qry.Open;      SetLength(rows.tunits, db.qry.RecordCount);      db.qry.First;      i := 0;      while not db.qry.Eof do      begin        rows.tunits[i].unitid := db.qry.fieldbyname('unitid').asstring;        rows.tunits[i].unitname := db.qry.fieldbyname('unitname').asstring;        inc(i);        db.qry.Next;      end;      rows.status := 200;      rows.message := 'success';      result := Tserial.marshal<TtunitArray>(rows);    except      on E: Exception do      begin        res.status := 500;        res.exception := E.message;        result := Tserial.marshal<TRes>(res);      end;    end;  finally    pool.Unlock(db);  end;end;
function TFunc2872.insert(url: string; body: rawbytestring): string;var  db: tdb;  pool: tdbpool;  arr: tarray<string>;  res: TRes;begin  try    try      var rows: TtunitArray;      rows := Tserial.unmarshal<TtunitArray>(body);      arr := url.Split(['/']);      pool := GetDBPool('1');      db := pool.Lock;      db.startTrans;      for var row: Ttunit in rows.tunits do      begin        db.qry.Close;        db.qry.SQL.Clear;        db.qry.SQL.Text := 'insert into tunit (unitid,unitname) values (:unitid,:unitname)';        db.qry.ParamByName('unitid').AsString := row.unitid;        db.qry.ParamByName('unitname').AsString := row.unitname;        db.qry.ExecSQL;      end;      db.commitTrans;      res.status := 200;      res.message := 'success';      Result := Tserial.marshal<TRes>(res);    except      on E: Exception do      begin        db.rollbackTrans;        res.status := 500;        res.exception := E.Message;        Result := Tserial.marshal<TRes>(res);      end;    end;  finally    pool.Unlock(db);  end;end;
function TFunc2872.update(url: string; body: rawbytestring): string;var  db: tdb;  pool: tdbpool;  arr: tarray<string>;  res: TRes;begin  try    try      var rows: TtunitArray;      rows := Tserial.unmarshal<TtunitArray>(body);      arr := url.Split(['/']);      pool := GetDBPool('1');      db := pool.Lock;      db.startTrans;      for var row: Ttunit in rows.tunits do      begin        db.qry.Close;        db.qry.SQL.Clear;        db.qry.SQL.Text := 'update tunit set unitid=:unitid,unitname=:unitname where unitid=:key0';        db.qry.ParamByName('unitid').AsString := row.unitid;        db.qry.ParamByName('key0').value := row.unitid;        db.qry.ParamByName('unitname').AsString := row.unitname;        db.qry.ExecSQL;      end;      db.commitTrans;      res.status := 200;      res.message := 'success';      Result := Tserial.marshal<TRes>(res);    except      on E: Exception do      begin        db.rollbackTrans;        res.status := 500;        res.exception := E.Message;        Result := Tserial.marshal<TRes>(res);      end;    end;  finally    pool.Unlock(db);  end;end;
function TFunc2872.delete(url: string; body: rawbytestring): string;var  db: tdb;  pool: tdbpool;  arr: tarray<string>;  res: TRes;begin  try    try      arr := url.Split(['/']);      pool := GetDBPool('1');      db := pool.Lock;      db.qry.Close;      db.qry.SQL.Clear;      var where: string := ' where ' + TNetEncoding.URL.Decode(arr[3]);      db.qry.SQL.Text := 'delete from tunit' + where;      db.qry.ExecSQL;      res.status := 200;      res.message := 'success';      Result := Tserial.marshal<TRes>(res);    except      on E: Exception do      begin        res.status := 500;        res.exception := E.Message;        Result := Tserial.marshal<TRes>(res);      end;    end;  finally    pool.Unlock(db);  end;end;
initialization  RegisterClass(TFunc2872);
end.复制代码
 2)添加路由配置
 
 3)将自动生成的单元添加进工程里面,并编译工程。
 
 文章转载自:delphi中间件
划线
评论
复制
发布于: 刚刚阅读数: 5

不在线第一只蜗牛
关注
还未添加个人签名 2023-06-19 加入
还未添加个人简介










 
    
评论