HandyLay API
HandyLay 提供一个公开的 HTTP 地址,可以为你描述的房间规划瓷砖或地板的排版。返回内容包括该排版需要多少块、其中整块和切割块各有多少、有多少材料最终成为边角料、一张等比平面图,以及一个能在规划器里打开该方案的链接。不需要密钥,也不需要账号。
整个 API 就是一个地址
请求是普通的 GET,因此可以直接粘贴到浏览器里,也可以交给能够抓取网页的助手。下面这个地址为 420 × 360 cm 的房间规划 60 × 60 cm 的瓷砖,填缝 2 mm。
GET https://handylay.app/api/plan?outline=E420 S360 W420 N360&pattern=squares&tileSize=600&joint=2带缺角或壁龛的房间写法相同,只是绕行更长。这个例子是一个 L 形房间,中间有 40 × 40 cm 的柱子,用 90 × 600 mm 的板材铺人字拼。
GET https://handylay.app/api/plan?outline=E500 S300 W200 S200 W300 N500&subtract=200,150,40,40&pattern=herringbone&tileWidth=90&tileHeight=600同样的字段也可以作为 JSON 请求体通过 POST 发送,便于从代码中调用。
POST /api/plan房间用厘米,砖块用毫米
房间尺寸和起铺点使用厘米,砖块尺寸和填缝宽度使用毫米。这样划分对应这些数字的来源:墙是用卷尺量的,砖块尺寸则来自厂商的规格表。
单位写错不会有任何提示,因为 20 mm 的砖和 200 mm 的砖同样合法。当结果看起来离谱时,这通常是第一个该检查的地方。
房间通过绕墙一周来描述
outline 参数按经过顺序列出每面墙。每面墙由方向和长度(厘米)组成:E 向右、S 向下、W 向左、N 向上。420 × 360 cm 的矩形写作 E420 S360 W420 N360。
绕行必须回到起点,否则响应会说明差了多少。L 形房间是 E500 S300 W200 S200 W300 N500,其他由直墙组成的形状同样通过继续追加线段得到。斜墙写作 A 方位角 冒号 长度,方位角以正东为零、顺时针计算度数。
柱子、管井等开口用 subtract 参数中的矩形扣除。无法用绕行描述的房间,可以直接在 polygon 参数中给出顶点列表。
除房间描述外,其余都是可选的
不在下列名单中的名称会作为排版自身的参数传入,例如人字拼的 tileWidth。这份名单从哪里获取,见下文关于排版的章节。
| 名称 | 含义 |
|---|---|
outline | 按绕行顺序列出的房间墙面,例如 E420 S360 W420 N360。 |
polygon | 轮廓顶点,写成以空格分隔的 x,y 对。可替代 outline。 |
holes | 地面上的洞,写法同 polygon;多个环用分号分隔。 |
subtract | 矩形开口,格式为 x,y,宽,高(厘米),多个用分号分隔。 |
pattern | 要铺的排版方式。默认 squares。 |
joint | 填缝宽度(毫米)。默认使用该排版自带的值。 |
color | 整个图案中所有砖块使用的同一个十六进制颜色。 |
gapColor | 填缝颜色,十六进制。 |
start | 起铺点,格式 x,y(厘米)。这个参数决定靠墙处的切割如何落位。 |
width | 图纸宽度(像素)。 |
walls | 在房间四周绘制墙体带和墙长标注。默认开启。 |
format | json 返回数字,svg 返回图纸本身。 |
inlineSvg | 把图纸一并放进 JSON 响应。 |
credit | 图纸边缘的 handylay.app 署名。默认开启。 |
link | 生成规划器链接。比较不同方案时可关闭。 |
lang | 排版名称和规划器链接的语言:en、pl、es 或 zh。 |
响应带回的是数字,不只是一张图
默认返回 JSON。图纸在其中是一个地址而不是内容,这样读响应时不必翻过几千字节的标记。inlineSvg 参数会把它嵌入进来,format=svg 则从同一地址只返回图片。
warnings 字段是把方案交给别人之前最该处理的部分。它会指出靠墙处出现了无法使用的窄条,或者损耗偏高。把 start 移动半块砖再问一次,通常就能解决。
| 名称 | 含义 |
|---|---|
surface.areaM2 | 扣除开口后的地面面积,单位平方米。 |
surface.perimeterM | 房间周长,单位米。 |
surface.wallsCm | 各面墙的长度(厘米),按顺序排列。 |
pattern.parameters | 实际使用的排版参数,包含默认值。 |
pattern.jointMm | 填缝宽度(毫米)。 |
pattern.startCm | 排版起铺点(厘米)。 |
tiles.total | 该排版需要购买的砖块数量。 |
tiles.whole | 其中整块铺设的数量。 |
tiles.cut | 其中需要切割的数量。 |
tiles.wastePercent | 所购材料中最终成为边角料的比例。 |
tiles.narrowestCutMm | 所有切割块中最短的一边。数值很小说明出现了窄条。 |
tiles.sliverCount | 切下来不足整块十分之一的数量。 |
warnings | 这个排版有什么问题,以及通常怎样解决。 |
svgUrl | 同一张图纸的独立地址。 |
plannerUrl | 在规划器中打开完成的方案,可在其中拖动起铺点。 |
GET https://handylay.app/api/plan?outline=E420 S360 W420 N360&pattern=bricks&format=svg每种排版都会自述参数
每种排版有自己的参数:人字拼接受 tileWidth、tileHeight 和 direction。与其猜测名称,不如从另一个地址获取,它会列出全部排版及其取值范围、默认值和已翻译的标签。
GET /api/plan/patterns目前可用的排版:
squares-patternbricks-patternvertical-bricks-patternhexagons-patternflat-top-hexagons-patterndiamonds-patternrhombus-patternisometric-cubes-patternherringbone-patternchevron-pattern
不需要密钥,但有额度限制
这个接口是开放的,因为顺着链接过来的助手没有地方保存密钥。控制成本的是输入上限:单个方案最多 20 000 块、绕行最多 64 面墙、最多 32 个开口,以及房间面积的上限。超出任何一项都会返回一条说明该改传什么的消息。
同一地址的请求限制为每分钟三十次。比较多个起铺点时请加上 link=false,因为每个返回规划器链接的请求都会存储一个项目。链接只从最终要交出去的那次调用中获取。
机器可读的描述放在两个地址
OpenAPI 描述用于把这个接口接成助手或自有代码中的工具。llms.txt 文件概括了 HandyLay 是什么、这个 API 能做什么,其形式专为模型阅读而写。